1

我正在使用带有 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 类?

4

0 回答 0