【问题标题】:symfony2 twig template load checkboxes from many to many entity relationshipsymfony2 twig 模板从多对多实体关系加载复选框
【发布时间】:2015-12-22 08:51:22
【问题描述】:

这里有新的 Symfony2 用户。我有 2 个相关的实体,一对多是单向的。我正在像doctrine documentation suggests、文章(一个)和标签(很多)一样做多对多。我希望显示在 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(), );
}

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

必须管理传递给选择字段的实体。也许坚持 它们在实体管理器中?

我不完全确定我是否走在正确的轨道上。我只想给文章加标签!

谢谢

【问题讨论】:

    标签: symfony doctrine-orm


    【解决方案1】:

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

    如果数据库中有任何标签,Symfony 会自动获取它们并在表单中用复选框显示它们。如果用户选中一个复选框,这个标签将被添加到文章中。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2013-08-07
      • 1970-01-01
      相关资源
      最近更新 更多