Sonata ODM Admin 自定义过滤器集

Posted

技术标签:

【中文标题】Sonata ODM Admin 自定义过滤器集【英文标题】:Sonata ODM Admin custom set of filters 【发布时间】:2019-03-17 12:34:53 【问题描述】:

我正在尝试将项目中的 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 个过滤器,一切正常。

有人可以帮助解决这个问题吗?谢谢。

【问题讨论】:

【参考方案1】:

在调查了这个问题之后,我做出了决定。

当我们在“add”方法中设置第二个参数时,奏鸣曲将过滤器类型识别为“DefaultFilterType >”。然后 Sonata 将一些默认参数分配给该过滤器。它影响过滤器的行为。 但是如果我将第二个参数保留为“null”,那么过滤器将寻找“FieldType 的类型"(第四个参数)。然后在我的情况下过滤成为“ChoiceType”,它工作正常。

还有一件更重要的事情,“ChoiceType”应该来自 Symfony,而不是来自 Sonata

【讨论】:

以上是关于Sonata ODM Admin 自定义过滤器集的主要内容,如果未能解决你的问题,请参考以下文章

Sonata Admin Bundle - 自定义模板

Sonata Admin 自定义模板

Sonata Admin Bundle - 表单类型:sonata_type_collection - 自定义模板?

为 Sonata Admin 包配置自定义模板

Sonata Admin 中没有自定义视图的面包屑?

自定义日期范围字段 Sonata Admin