Sonata Admin Bundle 3.57, как добавить свои значения в блок с выбором количества выводимых элементов на странице?

Здравсвуйте.

Изначальна задача казалась элементарной, но по итогу сижу крайне продолжительное время и конца и края этому не вижу :( Вводы данные:

* Движок `Symfony 4.4.37`
* В качестве админки используется пакет `"sonata-project/admin-bundle": "3.57"`

Необходимо в блок, есть есть возможность выбрать число и изменить количество выводимых элементов на странице добавить свои значения, пусть будет 512 и 1024

введите сюда описание изображения

**Сделать это необходимо сразу для всех классов админки**, то есть можно сетить (`setPerPageOptions()`) в каждом конкретном случае, но такой способ не катит (приложение большое и постоянно допиливается, поэтому надо добится того, что бы указанные значения появлялись автоматически).

Порывшись в интеренете казалось бы, было найдено решение, подписаться на событие `sonata.admin.event.configure.datagrid`. Вообще касательно этих событий (полный список https://symfony.com/bundles/SonataAdminBundle/current/reference/events.html)  в интернетах не нашел нормальных примеров((

Подписчика я вроде сделал и сначала даже не заметил баг, который появился в разделе фильтров (который обнаружил далеко не сразу).

class PageSizeOptionsSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents(): array
    {
        return [
            'sonata.admin.event.configure.datagrid' => ['onDatagrid', 10],
        ];
    }

    public function onDatagrid(ConfigureEvent $event): void
    {
        /** @var AbstractAdmin $admin */
        $admin = $event->getAdmin();

        $admin->setPerPageOptions(
            array_unique(
                array_merge(
                    $admin->getPerPageOptions(),
                    [512, 1024]
                )
            )
        );

        /** @var Datagrid $datagrid */
        $datagrid = $admin->getDatagrid();
        $datagridValues = $datagrid->getValues();

        $filter = $admin->getRequest()->get('filter');
        $_page = $datagridValues['_page'];
        $_per_page = $datagridValues['_per_page'];

        if ($filter && array_key_exists('_page', $filter)) {
            $_page = (int)$filter['_page'];
        }

        if ($filter && array_key_exists('_per_page', $filter)) {
            if (is_array($filter['_per_page'])) {
                $_per_page = (int)$filter['_per_page']['value'];
            } else {
                $_per_page = (int)$filter['_per_page'];
            }
            $admin->setMaxPerPage($_per_page);
        }

        // Обновляем конфигурацию грида
        $datagrid->setValue('_per_page', null, $_per_page);
        $datagrid->setValue('_page', null, $_page);
        $datagrid->buildPager();

        /** @var Pager $pager */
        $pager = $datagrid->getPager();

        // Устанавливаем настройки пагинации
        $pager->setMaxPerPage($_per_page);
        $pager->setPage($_page);
    }
}

По скрину выше, видно, что значения добавились и пагинация работает без нареканий, но вот в блоке с фильтрами вылез баг в виде

1. lable поля, которого быть не должно
2. ошибки валидации, на предмет того, что в поле появыилось не валидное значение

введите сюда описание изображения

Вот инфо по ошибке валидации из профилировщика

введите сюда описание изображения

Проблемный участок кода нашел:
`
// Обновляем конфигурацию грида
$datagrid->setValue('_per_page', null, $_per_page);
$datagrid->setValue('_page', null, $_page);
`

Но вот как пофиксить - ума не приложу если бурать эти строки - перестает работать выбор количиста выводимых элементов на странице, то есть я выбираю например 512, страница перезагружается и сбрасывается на дефолтное значение (32)

Может кто работал с Sonata или есть идеи, буду рад любоу совету, а то у самого уже голова пухнет :(

Ответы (0 шт):