我正在尝试将项目中的sonata-admin部分从版本2升级到3。据我所知,筛选系统发生了一些变化。 现在,过滤部分如下所示:
/**
* Fields to be shown on filter forms
*
* @param DatagridMapper $datagridMapper
*/
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('updated_from', 'doctrine_mongo_callback', [
'callback' => function ($queryBuilder, $alias, $field, $value) {
if (!$value['value']) {
return;
}
$queryBuilder
->field('updated_at')
->gte(new \DateTime($value['value']));
return true;
}, 'label' => 'Updated at, from'])
->add('updated_to', 'doctrine_mongo_callback', [
'callback' => function ($queryBuilder, $alias, $field, $value) {
if (!$value['value']) {
return;
}
$queryBuilder
->field('updated_at')
->lte(new \DateTime($value['value']));
return true;
}, 'label' => 'Updated at, to'])
->add('role', 'doctrine_mongo_choice', [], ChoiceType::class, [
'label' => 'Role Name',
'operator_type' => HiddenType::class,
'field_options' => [
'choices' => $this->getFilter('role')
]
]);
}
通常,过滤器可以工作,但是我不能单独使用一个过滤器。 当我尝试通过“ updated_from” 奏鸣曲进行过滤时,请我选择其他2个过滤器,但什么也不显示。然后,我选择其他两个过滤器,一切正常。
有人可以解决这个问题吗?谢谢。
答案 0 :(得分:0)
在对此问题进行调查后,我做出了决定。
当我们在“ add ”方法中设置第二个参数时,奏鸣曲将过滤器类型标识为“ DefaultFilterType >”。然后,Sonata为该过滤器分配了一些默认参数。它影响了过滤器的性能。 但是,如果我将第二个参数保留为“ null ”,则过滤器将查找“ FieldType ”类型”(第4个参数)。然后在我的情况下,筛选器变成“ ChoiceType ”,它可以正常工作。
还有一个更重要的内容,即“ ChoiceType ”应该来自 Symfony ,而不是来自 Sonata 。