我正在使用带有 Doctrine 的 Symfony 2.8。我在形式上有一些问题。
我想我了解如何创建一个嵌入单个对象或一组表单的表单。但我想创建一个只嵌入一个集合对象的表单。因为实体具有 OneToMany 关系,我想同时编辑该关系的一个对象。
假设我想创建一个页面,显示用户可以投票的文章。我可以在哪里放置用户 ID,以便唯一字段可以编辑投票属性?
数据库
User:
columns:
id: integer
username: string
password: string
ArticleVote:
columns:
id: integer
user_id: integer
article_id: integer
vote: boolean
Article:
columns,
id: integer
title: string
description: string
DefaultController.php
<?php
namespace AppBundle\Controller;
class DefaultController extends Controller
{
public function indexAction(Request $request)
{
$article = new Article();
$article->setTitle('Title');
$article->setDescription('Description');
$form = $this->createForm(ArticleType::class, $article);
return $this->render('default/index.html.twig', array(
'form' => $form->createView(),
));
}
}
文章类型.php
<?php
namespace AppBundle\Form\Type;
class ArticleType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('articleVotes', CollectionType::class, array('entry_type' => ArticleVoteType::class));
}
}
文章投票类型.php
<?php
namespace AppBundle\Form\Type;
class ArticleVoteType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('vote', ChoiceType::class, array(choices' => array('Yes' => true, 'No' => false,));
}
}
默认/index.html.twig
{% extends 'base.html.twig' %}
{% block body %}
{{ form_start(form) }}
{{ form_row(form.articleVotes.vote) }}
{{ form_end(form) }}
{% endblock %}
我知道在这种情况下,我可以直接使用 ArticleVoteType 在控制器中创建表单并忽略 ArticleType 但这只是一个示例。
我应该将 ArticleVote 对象放在 createForm(ArticleType::class, $article, $option) 方法的 $option 数组中,并且不在 ArticleType 类中添加 CollectionType 吗?如果是,我应该如何编写 ArticleType 类?