У меня есть backoffice под SonataAdmin и класс ForumAdmin
, и этот класс определяет список полей, которые отображаются в шаблоне списка форумов.
Что-то вроде этого:
protected function configureListFields(ListMapper $listMapper)
{
$listMapper->addIdentifier('name');
$listMapper->addIdentifier('description');
$listMapper->addIdentifier('category');
$listMapper->addIdentifier('weight');
$listMapper->addIdentifier('createdAt');
$listMapper->addIdentifier('updatedAt');
$listMapper->add('imageName', FileType::class, ['template' => 'Admin/ForumAdmin/image.html.twig']);
}
Это работает совершенно нормально. Я получаю все форумы с этими полями.
Но теперь я бы хотел по умолчанию применить фильтр. Я не хочу, чтобы все форумы появлялись в списке, но, например, только те, у кого есть категория (которая является другой сущностью), равны указанному c значению.
Есть ли способ справиться с этим? Я предполагаю, что хочу сделать ту же работу, что и DatagridMapper, но я хочу сделать это уже перед генерацией списка.
Спасибо за вашу помощь
РЕДАКТИРОВАТЬ: я увидел что-то, говорящее использовать createQuery function
public function createQuery($context = 'list')
{
$query = parent::createQuery($context);
$query->andWhere(
$query->expr()->eq($query->getRootAliases()[0] . '.my_field', ':my_param')
);
$query->setParameter('my_param', 'my_value');
return $query;
}
Проблема:
Метод 'andWhere' не найден в \ Sonata \ AdminBundle \ Datagrid \ ProxyQueryInterface