【问题标题】:How to implement dynamic filters (linked select box ) with Sonata?如何使用 Sonata 实现动态过滤器(链接选择框)?
【发布时间】:2016-05-20 08:21:25
【问题描述】:

我正在尝试使用 Sonata 实现一些动态过滤器。我拉我的头发。

事实上,我有三个对象(Engine > Motor > Sensor)。

class Engine {
    /**
     * @ORM\OneToMany(targetEntity=Motor, mappedBy=engine)
     */
    private $motors;
}

class Motor {
    /**
     * @ORM\OneToMany(targetEntity=Sensor, mappedBy=motor)
     */
    private $sensors;

    /**
     * @ORM\ManyToOne(targetEntity=Engine, inversedBy=motors)
     */
    private $engine;
}

class Sensor {
    /**
     * @ORM\ManyToOne(targetEntity=Motor, inversedBy=sensors)
     */
    private $motor;
}

这段代码只是为了了解模型。

在管理部分,我想按引擎和电机过滤传感器。所以当我选择引擎时,我希望电机的过滤器自动更换。

经过一些研究,我的研究将我引向了回调。但我从未使用过它,关于它的文档非常少。所以如果有人可以帮助我。

这是我的管理端代码:

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;
    }
}

提前谢谢你。

【问题讨论】:

    标签: php symfony sonata-admin


    【解决方案1】:

    我最好在这里使用任何类型的 API。将大量实体发送到前端并不是一个好主意。从数千个实体中选择可能会导致浏览器挂起。

    例如,您可以通过简单的 JSON API 使用任何类型的 jQuery 自动完成输入。

    我很久以前就实现了一个。

    表单类型 https://github.com/scaytrase/form-extensions/blob/master/src/ScayTrase/Forms/ExtensionsBundle/Form/Type/EntityAutocompleteType.php

    jQuery 插件 https://github.com/scaytrase/form-extensions/blob/master/src/ScayTrase/Forms/ExtensionsBundle/Resources/public/js/jquery.entity_autocomplete.js

    树枝模板 https://github.com/scaytrase/form-extensions/blob/master/src/ScayTrase/Forms/ExtensionsBundle/Resources/views/Form/entity_autocomplete.html.twig

    不确定它是否与最新的 3.0 表单兼容,但修改应该很容易

    【讨论】:

    • 所以,新版本终于解决了问题。非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-26
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2017-08-16
    • 2019-02-07
    • 1970-01-01
    相关资源
    最近更新 更多