【问题标题】:How to use existing entity in a Symfony2 form?如何在 Symfony2 表单中使用现有实体?
【发布时间】:2012-11-23 11:52:38
【问题描述】:

我有这两个实体:

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 仅引用标签(之前已获取) .

有什么想法吗?

【问题讨论】:

  • 你是怎么解决你的问题的?

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


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

    你可以这样使用:

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

    【讨论】:

    • 是的,正如我所建议的!但是,当您有几十个标签时,它在实践中没有用!想象一下 Stackoverflow 中的标签数量显示在一个独特的选择中!
    猜你喜欢
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-08
    • 1970-01-01
    • 2016-01-27
    相关资源
    最近更新 更多