У меня есть простое поле генератора форм:
$formMapper->add('project',EntityType::class, [
'class' => Project::class,
]);
Это поле для выбора родителя в древовидной структуре данных. Он очень хорошо работает в ADD, но в Edit я не хочу проецировать с идентификатором X, чтобы можно было выбрать родительский для проекта с идентификатором X
Я пытаюсь использовать свойство query_builder, но не знаю, как определить идентификатор текущего элемента редактирования из класса администратора.
Как поймать этот идентификатор или простейший идентификатор исключения текущего элемента редактирования в select?
@Stephan Vierkant Спасибо за совет






Я полагаю, ваш FormType сопоставлен с вашим отредактированным элементом. Следовательно, вы можете использовать что-то вроде (имена классов / полей / сущностей должны быть заменены на ваши):
use Doctrine\ORM\EntityRepository;
class ProjectFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$currentId = $builder->getData()->getId();
$builder->add('project', EntityType::class, array(
'class' => Project::class,
'query_builder' => function (EntityRepository $er) use ($currentId) {
return $er->createQueryBuilder('p')
->where('p.id != :idCurrent')
->setParameter('idCurrent', $currentId);
},
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => Project::class,
));
}
}
Спасибо. Ваш ответ хорош, но через некоторое время я нашел самое простое решение этой ситуации. AbstractAdmin имеет метод getSubject ().
Полезно знать, я должен признать, что я не очень знаком с администратором сонаты, я дал вам более общий ответ, который работает вне контекста сонаты.
Помогает ли вам данный ответ? Если нет, дайте нам знать. Если да, примите ответ (и, возможно, проголосуйте за него). Полное игнорирование ответа - это немного недоброжелательно.