localinks / dependentautocompletebundle
扩展Sonata Autocomplete表单类型,并使用其他表单字段值过滤结果
Requires
- php: >=5.3.3
- sonata-project/admin-bundle: ^3.14
- symfony/framework-bundle: ^2.3 || ^3.0 || ^4.0
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