Php 如何使用Sonata实现动态过滤器(链接选择框)?
我试图用索纳塔实现一些动态过滤器。我拉我的头发 事实上,我有三个对象(引擎>电机>传感器) 这段代码只是为了了解模型 在管理部分,我想通过发动机和电机过滤传感器。所以当我选择发动机时,我希望发动机的过滤器能自动更换 经过一些研究,我的研究让我找到了回调。但我从未使用过它,关于它的文档非常少。如果有人能帮我 以下是我在管理方面的代码:Php 如何使用Sonata实现动态过滤器(链接选择框)?,php,symfony,sonata-admin,Php,Symfony,Sonata Admin,我试图用索纳塔实现一些动态过滤器。我拉我的头发 事实上,我有三个对象(引擎>电机>传感器) 这段代码只是为了了解模型 在管理部分,我想通过发动机和电机过滤传感器。所以当我选择发动机时,我希望发动机的过滤器能自动更换 经过一些研究,我的研究让我找到了回调。但我从未使用过它,关于它的文档非常少。如果有人能帮我 以下是我在管理方面的代码: use Sonata\AdminBundle\Admin\Admin; use Sonata\AdminBundle\Datagrid\DatagridMapper
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
class SensorAdmin extends Admin {
/**
* @param DatagridMapper $prmDatagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $prmDatagridMapper)
{
$prmDatagridMapper
->add("motor.engine", null, array("label" => "Engine"))
->add('motor', null, array(
"callback" => array($this, "callbackMotorFilter")
))
;
}
public function callbackMotorFilter ($queryBuilder, $alias, $field, $value)
{
if (!$value) {
return;
}
$queryBuilder->leftJoin(sprintf('%s.motor', $alias), 'm');
$queryBuilder->leftJoin("m.engine", "e");
$queryBuilder->andWhere('e.id = :engine_id');
$queryBuilder->setParameter('engine_id', $value['value']);
return true;
}
}
提前谢谢。我最好在这里使用任何类型的API。将大量实体发送到前端不是一个好主意。从数千个实体中进行选择可能会挂起浏览器 例如,您可以将任何类型的jQuery自动完成输入与简单的JSON API一起使用 我很久以前就实现了一个 表格类型 jQuery插件 小枝模板
不确定它是否与最新的3.0表单兼容,但修改应该很容易我最好在这里使用任何类型的API。将大量实体发送到前端不是一个好主意。从数千个实体中进行选择可能会挂起浏览器 例如,您可以将任何类型的jQuery自动完成输入与简单的JSON API一起使用 我很久以前就实现了一个 表格类型 jQuery插件 小枝模板
不确定它是否与最新的3.0表单兼容,但修改应该很容易所以,最后,问题可以通过新版本解决。多谢了,终于,新版本解决了这个问题。谢谢
use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
class SensorAdmin extends Admin {
/**
* @param DatagridMapper $prmDatagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $prmDatagridMapper)
{
$prmDatagridMapper
->add("motor.engine", null, array("label" => "Engine"))
->add('motor', null, array(
"callback" => array($this, "callbackMotorFilter")
))
;
}
public function callbackMotorFilter ($queryBuilder, $alias, $field, $value)
{
if (!$value) {
return;
}
$queryBuilder->leftJoin(sprintf('%s.motor', $alias), 'm');
$queryBuilder->leftJoin("m.engine", "e");
$queryBuilder->andWhere('e.id = :engine_id');
$queryBuilder->setParameter('engine_id', $value['value']);
return true;
}
}