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

Posted

技术标签:

【中文标题】Symfony sonata EntityType 编辑表单 - 选择 - 获取其他当前【英文标题】:Symfony sonata EntityType edit form - select - get other that current 【发布时间】:2018-10-25 20:12:27 【问题描述】:

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

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

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

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

如何在select中捕获当前编辑项的这个id或最简单的排除id?

【问题讨论】:

给定的答案对您有帮助吗?如果没有,请告诉我们。如果是这样,请接受(并可能赞成)答案。完全无视答案有点不友好。 @Stephan Vierkant 感谢一些提示 【参考方案1】:

我想您的 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() 方法。 很高兴知道,我必须承认我对奏鸣曲管理员不是很熟悉,我给了你一个更一般的答案,它在奏鸣曲上下文之外起作用。

以上是关于Symfony sonata EntityType 编辑表单 - 选择 - 获取其他当前的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 2 - 为 EntityType 定义选定的值

Symfony - 使用重复的 EntityType 优化表单

预填充 EntityType 类型的 Symfony 表单的字段

选中 Symfony 表单 EntityType 复选框

Symfony Forms EntityType 使用 JS 全选

Symfony 表单 - EntityType 通过实体 ID 选择选项