localinks/dependentautocompletebundle

此包最新版本(2.0)没有可用的许可信息。

扩展Sonata Autocomplete表单类型,并使用其他表单字段值过滤结果

2.0 2018-10-25 16:52 UTC

This package is auto-updated.

Last update: 2024-09-26 07:32:37 UTC


README

用途?

LocalinksDependentAutoCompleteBundle允许在Sonata Admin表单中,使用同一表单中其他字段的值来过滤“sonata_type_model_autocomplete”字段的搜索结果。

安装

步骤1:下载DependentAutoCompleteBundle

使用Composer

将以下内容添加到您的composer.json文件的"require"部分

    "localinks/dependentautocompletebundle": "dev-master"

并更新您的依赖

    php composer.phar update

步骤2:启用包

在您的app/AppKernel.php中注册该包

<?php
...
public function registerBundles()
{
    $bundles = array(
        ...
        new Localinks\DependentAutoCompleteBundle\LocalinksDependentAutoCompleteBundle(),
        ...
    );
...

使用方法

假设您有一个自动完成“country”表单字段和另一个“city”。您希望“city”字段根据“country”字段的内容进行筛选。

为此,您需要更新您的Admin类

<?php
...
    protected function configureFormFields(FormMapper $formMapper)
    {
        $formMapper
            ->add('country', 'sonata_type_model_autocomplete', array(
                'label' => 'Country',
                'property' => 'name',
                'attr' => array('data-dependent-id' => 'country'),
                'required' => false
            ))
            ->add('city', 'sonata_type_model_autocomplete', array(
                    'label' => 'City',
                    'dependencies' => array('country' => 'country_id'),
                    'property' => 'name',
                    'callback' => function (Admin $admin, $property, $value) {
                        $request = Request::createFromGlobals();
                        $dependencies = $request->get('dependencies');

                        $datagrid = $admin->getDatagrid();
                        $queryBuilder = $datagrid->getQuery();

                        if(!is_null($dependencies['country_id']) && $dependencies['country_id'] !== "") {
                            $queryBuilder
                                ->leftJoin($queryBuilder->getRootAlias() . '.country', 'cco')
                                ->where($queryBuilder->getRootAlias() . '.' .$property . ' LIKE :value')
                                ->andWhere('cco.id = :country_id')
                                ->setParameters(array(
                                    'country_id' => $dependencies['country_id'],
                                    'value' => $value . '%'
                                ));
                            }
                        else {
                            $queryBuilder
                                ->where($queryBuilder->getRootAlias() . '.' .$property . ' LIKE :value')
                                ->setParameters(array(
                                    'value' => $value . '%'
                                ));
                        }
                    },
                    'required' => false
            ))
        ;
    }

请注意“country”字段的“data-dependent-id”值。此值将用于标识字段。为了避免任何错误,请使用与字段名称相同的值(例如“country”)。

在“city”字段中,添加一个“dependencies”选项,如上所示。在此数组中,使用上述相同的“data-dependent-id”值作为键,并使用您想要的任何变量名称作为值。

您仍需要创建“callback”函数:您上面命名的变量可通过Request对象访问(请参阅示例)。从那里,您可以创建过滤您字段的查询。

要求

LocalinksDependentAutoCompleteBundle需要SonataAdminBundle才能正常工作

许可

此包受GNU GENERAL PUBLIC LICENSE 3许可协议保护

作者

Mathieu Hautenauve mathieu@proxymart.be www.localinks.be