Sonata ODM Admin 自定义过滤器集
Sonata ODM Admin custom set of filters
我正在尝试将项目中的 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 个过滤器并且什么都不显示。然后我选择其他 2 个过滤器,一切正常。
有人可以帮忙解答这个问题吗?谢谢。
经过这个问题的调查,我做出了决定。
当我们在“add”方法中设置第二个参数时,sonata将过滤器类型识别为“默认过滤器类型”。然后 Sonata 将一些默认参数分配给该过滤器。它影响了过滤器的行为。
但是,如果我将第二个参数保留为“null”,则过滤器将查找“[=16=”类型]FieldType”(第 4 个参数)。然后过滤器在我的例子中变成了“ChoiceType”并且它工作正常。
还有一个更重要的东西,“ChoiceType”应该来自 Symfony,不是 奏鸣曲.
我正在尝试将项目中的 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 个过滤器并且什么都不显示。然后我选择其他 2 个过滤器,一切正常。
有人可以帮忙解答这个问题吗?谢谢。
经过这个问题的调查,我做出了决定。
当我们在“add”方法中设置第二个参数时,sonata将过滤器类型识别为“默认过滤器类型”。然后 Sonata 将一些默认参数分配给该过滤器。它影响了过滤器的行为。 但是,如果我将第二个参数保留为“null”,则过滤器将查找“[=16=”类型]FieldType”(第 4 个参数)。然后过滤器在我的例子中变成了“ChoiceType”并且它工作正常。
还有一个更重要的东西,“ChoiceType”应该来自 Symfony,不是 奏鸣曲.