alexsobolenko
@alexsobolenko
Программист

Как правильно настроить фильтр по ролям в SonataAdminBundle?

Перелопатил документацию SonataAdminBundle, но ничего не нашел подходящего.

Если указывать в configureDatagridFilters вот так:
$datagridMapper->add('roles');
фильтр работает хорошо всегда, кроме одного случая - при выборе advanced filters и is equal to
5d28c54a9765b405660929.png
всё из-за мудреной формы записи ролей в базу данных: a:1:{i:0;s:9;"ROLE_USER";}

Я решил использовать колбэк для поиска
$datagridMapper
            ->add(
                'roles',
                CallbackFilter::class,
                [
                    'operator_type' => TextType::class,
                    'callback' => [$this, 'filterByRoles'],
                ]
            );

и функцию реализовал, но
5d28c7e4ee940175340578.png
здесь пропал селект. Думаю, что я указал что-то не так в configureDatagridFilters, но никак не могу понять что.

Собственно, фильтр работает как надо, только заменить текстовое поле (на второй картинке) на селект, как на первой картинке.
  • Вопрос задан
  • 33 просмотра
Пригласить эксперта
Ответы на вопрос 1
mad_maximus
@mad_maximus
Если что, роли необязательно хранить так, как говорит симфони в документации. Это могут быть и простые строки. Важно только то, как вы вернете роли для симфони. Чтобы сильно не мучиться, можно сделать так:

->add('role', ChoiceType::class, [
                'choices' => [
                    'Пользователь' => Role::ROLE_USER,
                    'Автор' => Role::ROLE_AUTHOR,
                    'Редактор' => Role::ROLE_EDITOR,
                    'Главред' => Role::ROLE_CHIEF_EDITOR,
                    'Администратор' => Role::ROLE_ADMIN,
                ],
                'required' => false,
                'placeholder' => 'Роль',
            ])
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы