Здравсвуйте.
Изначальна задача казалась элементарной, но по итогу сижу крайне продолжительное время и конца и края этому не вижу :( Вводы данные:
* Движок `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 или есть идеи, буду рад любоу совету, а то у самого уже голова пухнет :(