2

我有这两个实体:

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 表单中使用我的表单,我希望我的客户能够使用idonly 来引用标签(之前已经获取过)。

有任何想法吗?

4

2 回答 2

1

你可以使用这样的东西:

$builder->add('tags', 'entity', array(
    'class' => 'AcmeHelloBundle:tag',
    'expanded' => true,
    'multiple' => true,
));
于 2012-11-23T17:39:13.240 回答
1

您可以使用实体字段类型e。它实际上是一种选择字段类型,您可以将其呈现为具有多项选择的选择或复选框列表。但是,如果您有很多标签,则会有太多选项,用户不会高兴。

所以,我建议实现一个类似 Stackoverflow 的标记系统。

我在一个项目中通过使用 Javascript tokeninput 库来做到这一点,就像loopj 这样。在实践中:

  1. 您应该首先呈现一个名为tags.

  2. 然后,您应该使用用于令牌处理的 Javascript 库处理向该输入字段的标记插入。

  3. Controller 将收到一个标记化的字符串,您必须处理该字符串才能Tag从 Doctrine 中检索实体。

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

于 2012-11-23T16:41:51.137 回答