Спасибо michał-tomczuk и спасибо jakumi , вы оба были очень полезны, но я думаю, что ваши предложения не сработали, потому что FormType
создан до AdminType
и«данные» пока недоступны в настройках контекста.По крайней мере, я нигде не смог его найти.
Я попробовал другой подход, который сработал, даже если это своего рода излишество.
Поскольку тип формы всегда используется в контексте редактирования, а в моем случаеВ области действия SonataAdmin я ввел маршрутизатор в тип и отфильтровал запрос по идентификатору объекта, который мне удалось получить из PathInfo:
<?php
use Symfony\Component\Routing\RouterInterface;
/** @var RouterInterface $router */
private $router;
/** {@inheritdoc} */
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefault('query_builder', function (Options $options) {
return function (EntityRepository $er) use ($options) {
$matches = [];
preg_match(
'/^.*\/([0-9a-z\-]+)\/edit$/',
$this->router->getContext()->getPathInfo(),
$matches
);
$queryBuilder = $er->createQueryBuilder('ent')
->orderBy('ent.name', 'ASC')
if (true === array_key_exists('1', $matches)) {
$queryBuilder
->andWhere('ent.id != :id')
->setParameter('id', $matches[1]);
}
return $queryBuilder;
};
});
}
Я знаю, что это грязное решение, но оно работает.