Форма редактирования EntityType сонаты Symfony - выберите - получите другую, текущую - PullRequest
0 голосов
/ 16 мая 2018

У меня есть простое поле генератора формы, подобное этому:

$formMapper->add('project',EntityType::class, [
            'class' => Project::class,
        ]);

Это поле для выбора родителя в древовидной структуре данных. В ADD это работает очень хорошо, но в Edit я не хочу, чтобы проект с идентификатором X показывал, насколько возможно выбрать родителя для проекта с идентификатором X

.

enter image description here

Я пытаюсь использовать свойство query_builder, но не знаю, как узнать идентификатор текущего элемента редактирования из класса Admin.

Как перехватить этот идентификатор или простейший идентификатор исключения текущего элемента редактирования в select?

1 Ответ

0 голосов
/ 16 мая 2018

Полагаю, ваш 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,
        ));
    }
}
...