【问题标题】:Symfony sonata EntityType edit form - select - get other that currentSymfony sonata EntityType 编辑表单 - 选择 - 获取其他当前
【发布时间】: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 感谢一些提示

标签: php symfony sonata-admin sonata


【解决方案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() 方法。
  • 很高兴知道,我必须承认我对奏鸣曲管理员不是很熟悉,我给了你一个更一般的答案,它在奏鸣曲上下文之外起作用。
猜你喜欢
  • 2019-01-12
  • 2015-09-05
  • 1970-01-01
  • 2021-11-08
  • 1970-01-01
  • 2021-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多