symfony2 twig模板加载从多个实体关系到多个实体关系的复选框

时间:2015-09-24 16:38:07

标签: symfony doctrine-orm

这里有新的Symfony2用户。我有2个相关的实体,一个到多个是单向的。我将其作为ManyToMany作为doctrine documentation suggests,Article(一)和Tags(很多)。我希望复选框显示在article.new页面和article.edit页面上显示标签名称。在表单提交时,标记实体的id存储在实体生成器为我创建的article_tags边表中。

仅发布相关代码。

标记实体 AppBundle / Entity / Tag.php

/** 
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
* @var string
*
* @ORM\Column(name="name", type="string", length=20)
*/
public $name;

文章实体 AppBundle / Entity / Article.php

/**
 * @ORM\ManyToMany(targetEntity="Tag")
 * @ORM\JoinTable(
 *      name="article_tags",
 *      joinColumns={@ORM\JoinColumn(name="article_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="tag_id", referencedColumnName="id", unique=true)}
 * )
 */
protected $tags;

/**
 * Add tag
 *
 * @param \AppBundle\Entity\Tag $tag
 *
 * @return Article
 */
public function addTag(\AppBundle\Entity\Tag $tag)
{
    $this->tags[] = $tag;

    return $this;
}

/**
 * Remove tag
 *
 * @param \AppBundle\Entity\Tag $tag
 */
public function removeTag(\AppBundle\Entity\Tag $tag)
{
    $this->tags->removeElement($tag);
}

/**
 * Get tags
 *
 * @return \Doctrine\Common\Collections\Collection
 */
public function getTags()
{
    return $this->tags;
}

文章表单类型 AppBundle / Form / ArticleType

$builder->add('title')
        ->add('body')
        ->add('author')
        ->add('tags', 'entity', array(
            'class' => 'AppBundle\Entity\Tag',
            'property' => 'name',
            'expanded' => 'true', ));

ArticleController AppBundle / Controller / ArticleController.php

* @Template()
 */
public function newAction()
{
    $entity = new Article();
    $tags = new Tag();
    $entity->addTag($tags);
    $form   = $this->createCreateForm($entity);
    return array('entity' => $entity,'form' => $form->createView(), );
}

截至目前,我收到的错误是......

  

必须管理传递到选择字段的实体。也许坚持下去   他们在实体经理?

我并不完全确定我是在正确的轨道上。我只是想把标签贴在文章上!

由于

1 个答案:

答案 0 :(得分:1)

在控制器中,您创建一个空白标记,并在创建表单之前将其添加到新文章中。这对我来说没有意义,我怀疑这是错误的来源。

如果数据库中有任何标签,Symfony将自动获取它们并使用表单中的复选框显示它们。如果用户选中了复选框,则此标记将添加到文章中。

只需删除这两行就可以了:

$tags = new Tag();
$entity->addTag($tags);