Пользовательский набор фильтров Sonata ODM Admin

Пытаюсь обновить свой раздел 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 других фильтра и ничего не показать. Затем я выбираю эти два других фильтра, и все работает.

Может ли кто-нибудь помочь в этом вопросе? Спасибо.


person Andii Prokhorovych    schedule 12.10.2018    source источник


Ответы (1)


После исследования в этом вопросе я пришел к решению.

Когда мы устанавливаем второй параметр в методе "add", соната идентифицирует тип фильтра как "DefaultFilterType". Затем Sonata присваивает этому фильтру некоторые параметры по умолчанию. Это повлияло на поведение фильтра. Но если я оставлю второй параметр как "null", то фильтр будет искать тип "FieldType " (4-й параметр). Затем в моем случае фильтр становится "ChoiceType", и он работает нормально.

И еще один важный момент: "ChoiceType" должен быть из Symfony, а не из Sonata.

person Andii Prokhorovych    schedule 19.10.2018