Symfony sonata EntityType编辑表单 - 选择 - 获取当前

时间:2018-05-15 21:46:02

标签: php symfony sonata-admin sonata

我有这样的简单表单生成器字段:

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

是树数据结构中的选择父项的字段。 它在ADD中工作得非常好,但是在编辑中我不想用id X显示项目,尽可能为id为X的项目选择父项

enter image description here

我正在尝试使用' query_builder'属性,但不知道如何从Admin类中捕获当前编辑项的id。

如何在select?

中捕获当前编辑项目的id或最简单的排除ID

1 个答案:

答案 0 :(得分:2)

我想您的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,
        ));
    }
}