如何在Symfony2表单中使用现有实体?

时间:2012-11-23 11:52:39

标签: forms symfony nested-forms symfony-forms tagging

我有这两个实体:

class Article
{
    /** @var ArrayCollection
    protected $tags;
}

class Tag
{
    protected $id;
    protected $name;
}

基本上我已经阅读了http://symfony.com/doc/master/cookbook/form/form_collections.html,但它并没有解释我的情况。

让我解释一下。

我在数据库中存在标签,所以我希望能够将多个标签与我的文章相关联,我不想允许创建不存在的标签。

由于我的目标是在REST api和web表单中使用我的表单,我希望我的客户端能够仅使用id来引用标记(这些标记本已被提取)前)。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可以使用entity field typ e。实际上,您可以将选择字段类型呈现为具有多个选择的选择或作为复选框列表。但是,如果您有许多标签,则会有太多选项,用户也不会满意。

因此,我建议实施一个类似Stackoverflow的标记系统。

我是通过使用Javascript标记输入库在项目中完成的,就像loopj一样。 在实践中:

  1. 您应首先呈现名为tags的文本字段。

  2. 然后您应该使用Javascript库处理对该输入字段的标记插入以进行令牌处理。

  3. Controller将接收您必须处理的标记化字符串,以便从Doctrine中检索Tag个实体。

  4. 最后,检索了Tag个实体的列表,将它们分配给您的Article实体并刷新所有内容。

答案 1 :(得分:1)

您可以使用以下内容:

$builder->add('tags', 'entity', array(
    'class' => 'AcmeHelloBundle:tag',
    'expanded' => true,
    'multiple' => true,
));