Symfony 4. ManyToMany 与属性的关联.自定义表单插入属性值,我该怎么做? [英] Symfony 4. ManyToMany association with attribute. Custom form to insert attribute value, how do I?

查看:37
本文介绍了Symfony 4. ManyToMany 与属性的关联.自定义表单插入属性值,我该怎么做?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Symfony 4 项目.我看不到如何编写以下规范.

假设我有两个实体 Alpha 和 Beta.当我创建一个 Alpha 对象 alpha 时,我希望将 (ManyToMany) 关联到一个或多个 Beta 对象.我知道如何渲染新表单和编辑表单.

我希望用一个属性来丰富 AlphaBeta 连接表,比如将 Beta 与 Alpha 相关联的 成本.问题是,当我创建一个 Alpha 对象并将其关联到一个 Beta 对象时,我无法丰富上述表单以插入或编辑 Cost 值.

是否有一种标准方法可以对这种情况进行编码?

我读到要走的路是有两个 OneToMany 关联 Alpha->AlphaBeta 和 Beta->AlphaBeta,但即使这样做,我也无法为 Alpha 定义/渲染表单以创建新的 Alpha 对象, 将一个 Beta 对象(或更多)与其关联,并为这种关联分配一个 Cost 值.

非常欢迎您的建议.谢谢

解决方案

看来我确实找到了方法,确实是非常简单的 Synfony 4 代码.
希望它对某人有用.

(注意:我使用 php bin/console make:entity/crud/form 来编写所需的脚本.下面是我如何修改从 make)

所以,假设我有 Alpha 和 Beta 实体.我希望有一个表单来创建一个新的 Alpha 对象,将一个或多个 Beta 对象与其关联,并为每个 Alpha-Beta 关联填写一个成本值.我也想要一个编辑表单.

首先我创建一个新的 AlphaBeta 实体,其字段为:

/*** @ORM\ManyToOne(targetEntity="App\Entity\Alpha", inversedBy="alphabetas", cascade={"persist"})* @ORM\JoinColumn(nullable=false)*/私人 $alpha;/*** @ORM\ManyToOne(targetEntity="App\Entity\Beta", inversedBy="betaalphas", cascade={"persist"})* @ORM\JoinColumn(nullable=false)*/私人 $beta;/*** @ORM\Column(type="string", length=255, nullable=true)*/私人$成本;

Alpha 类中,我需要

/*** @ORM\OneToMany(targetEntity="App\Entity\AlphaBeta",mappedBy="alpha",orphanRemoval=true,cascade={"persist"})*/私人 $alphabetas;

使用通常的 'getAlphaBetaaddAlphaBetaremoveAlphaBeta 方法.(类似于Beta)

我为新的 AlphaBeta 实体创建了常用的 CRUD 控制器.为了有一个也可以用作子表单的 AlphaBeta 表单,我定义了

class `AlphaBetaEmbeddedForm` 扩展 AbstractType {公共函数 buildForm(FormBuilderInterface $builder, array $options){$builder ->add('Beta', EntityType::class, array('类' =>测试版::类,'多个' =>错误的,'扩展' =>真的,'选择标签' =>'betaTitle' ))->add('cost', TextType::class);如果(空($options['remove_alpha_field'])){$builder->add('Alpha', EntityType::class, array('类' =>阿尔法::班级,'多个' =>错误的,'扩展' =>真的,'选择标签' =>'字母标题'));}}公共函数 configureOptions(OptionsResolver $resolver){$resolver->setDefaults(['data_class' =>AlphaBeta::类,'remove_alpha_field' =>错误的,]);}}

remove_alpha_field技巧 让我使用上面的表单作为表单中的子表单来创建 Alpha 对象:

class AlphaType 扩展 AbstractType {公共函数 buildForm(FormBuilderInterface $builder, array $options) {$builder->add('alphaTitle')->add('AlphaBetas', CollectionType::class, array('entry_type' =>AlphaBetaEmbeddedForm ::类,'entry_options' =>['标签' =>真,'remove_alpha_field' =>真的],'allow_add' =>真的,'标签' =>'贝塔斯','by_reference' =>错误的));}

要在主表单中呈现子表单,我需要一些 JS,如建议的 此处,插入Alphanew.html.twigedit.html.twig 模板中:

{% block javascripts %} 



        
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆