Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony Sonata如何对当前实体属性进行自动完成筛选_Symfony_Doctrine Orm_Autocomplete_Sonata Admin - Fatal编程技术网

Symfony Sonata如何对当前实体属性进行自动完成筛选

Symfony Sonata如何对当前实体属性进行自动完成筛选,symfony,doctrine-orm,autocomplete,sonata-admin,Symfony,Doctrine Orm,Autocomplete,Sonata Admin,我正在使用Sonata管理包进行sf2项目。 该项目是一个人道主义使命捐赠网站。 我有一个“个人”实体,代表捐助者(捐款者) 我的问题如下: 我必须使用自动补全功能在sonata列表视图中过滤结果。 我希望使用当前实体(“Personne”)的“name”属性筛选结果 我期待的是: $datagridMapper ->add('personne', 'doctrine_orm_model_autocomplete', array('label' => '

我正在使用Sonata管理包进行sf2项目。 该项目是一个人道主义使命捐赠网站。 我有一个“个人”实体,代表捐助者(捐款者)

我的问题如下: 我必须使用自动补全功能在sonata列表视图中过滤结果。 我希望使用当前实体(“Personne”)的“name”属性筛选结果

我期待的是:

$datagridMapper
    ->add('personne', 'doctrine_orm_model_autocomplete', 
          array('label' => 'AutoComplete'), 
          null, 
          array('property' => 'name'))

// error output : " The option `association_mapping` must be set for field: `personne` "
您可以在此要点上查看我的完整管理类和实体:

我知道此字段类型保留给实体关联(例如,我已经将其用于按人员名称(其他管理类)筛选捐赠实体的结果)

我的问题是: 有可能做我需要的吗? 如果我不能使用此字段类型完成此任务,那么实现此任务的正确方法是什么


感谢您的帮助。

经过大量测试,索纳塔似乎还没有提供此功能

因此,我在我的管理控制器中构建了一个自制的自动完成方法,并将其用作重写的CRUD:list.html.twig模板中的ajax。 此方法将字段名、其他自动完成字段值和关键字作为参数,并在keyup事件上重新加载结果

你可以看看这个要点:


如果你有一个优化我的代码的想法/主张(简单的自动完成字段类型$formMapper?),我真的很感兴趣。

可以选择一个字段并使用integrated select2来处理自动完成,但我不知道它在大表中的效果如何

    $datagridMapper
            ->add('personne','doctrine_orm_callback', array(
            'callback' => array($this, 'filterByName'),
            'field_type' => 'text',
             ), 'entity',array(
                'class' => 'AppBundle\Entity\Personne',
                'choice_label' => 'name'
                    ))
我们添加了
'doctrine\u orm\u callback'
,因为常规的字符串过滤器不能处理EntityType字段,所以我们需要自己做

public function filterByName($queryBuilder, $alias, $field, $value)
{
       if (!$value['value']) {
        return;
        }   

        $queryBuilder
                ->andWhere($alias . '.name' . ' = ' . ':name' )
                ->setParameter('name' , $value['value']->getName());

        return true;
}
还有一件事,如果下拉框少于10个选项,select2不会创建自动完成(搜索)框,因为它是在Admin.js中设置的


所以,如果你想让它少一点,你需要覆盖它。

我似乎还不太可能。我在github上添加了一个FR:-顺便说一句:你应该在你的twitter个人资料上链接你的github个人资料!:)
            select.select2({
                width: function(){
                    // Select2 v3 and v4 BC. If window.Select2 is defined, then the v3 is installed.
                    // NEXT_MAJOR: Remove Select2 v3 support.
                    return Admin.get_select2_width(window.Select2 ? this.element : jQuery(this));
                },
                dropdownAutoWidth: true,
                minimumResultsForSearch: 10,
                allowClear: allowClearEnabled
            });