Symfony:为OneToMany关系嵌入Collection的一个对象的表单

时间:2016-02-17 23:54:02

标签: php forms embed one-to-many symfony-2.8

我使用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类?

0 个答案:

没有答案