我使用Symfony 2.8和Doctrine。我在表格方面遇到了一些麻烦。
我想我了解如何创建嵌入单个对象或表单集合的表单。但我想创建一个只嵌入一个集合对象的表单。因为实体具有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(),
));
}
}
ArticleType.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));
}
}
ArticleVoteType.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类?