以下是我的表格:
电影
人
角色
所以,电影显然应该包含电影。人由人(演员,导演或作家)组成。表Role通过在其类中包含$movie
和$person
变量与其他2个表连接,两者之间具有多对一关系,最终导致 movie_id & 为person_id 。
我想要实现的是拥有表单,我可以插入新电影,还可以插入相关演员,导演和电影。写入器(或多个)。
最终表单结果应包含以下字段:
因此,在填写前三个输入后,用户从下拉列表中选择一个人,然后为所选人选择适当的角色。如果我正确思考,我应该能够从人物(姓名)表中选择,然后插入到电影中(名称,年份,描述)&角色(name,movie_id,person_id)表。
我知道我应该使用Form collections,但我不明白如何使用它们,至少在这种情况下。我想我应该从创建类似RoleModel类的东西开始,但不确定在进入此之前我是否犯了错误,这使得这个问题比它应该更复杂。 我的问题确实是 - 如何使用表单集合?
如果需要,我可以提供任何必要的代码。
答案 0 :(得分:0)
Symfony让它变得非常简单,首先,您需要在您的个人实体和电影实体之间添加双向关系(一对多),因此您需要:
代码:
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Person", inversedBy="movies")
*/
protected $person;
代码:
/**
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Movie", mappedBy="person")
*/
protected $movies;
现在,您可以在MovieType文件(表单配置文件)中执行以下操作:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name')
->add('year')
->add('description', TextareaType::class)
->add('person', EntityType::class, array(
'class' => Person::class, //This existed usually in (AppBundle\Entity\Person)
'choice_label' => 'name'
));
}
这是关于如何在Symfony中使用EntityType的简单演示。
祝你好运。答案 1 :(得分:0)
您可以通过嵌入FormTypes来解决这个问题,您可以创建一个由PersonFormType
和MovieFormType
组成的新组合,并且它需要一个额外的字段用于角色类型(导演,演员)等)
然后,在提交之后,您可以检索到这样的对象:
// SomeController's action
...
$data = $form->getData();
$person = $data['person'] // or whatever is the name of the field
您可以在文档中找到有关嵌入FormTypes的更多信息:https://symfony.com/doc/cur ...