2012-11-23 70 views
2

我有這兩個實體:如何使用Symfony2表單中的現有實體?

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

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

基本上我讀過http://symfony.com/doc/master/cookbook/form/form_collections.html,但它並不能說明我的情況。

讓我解釋一下。

我已經在數據庫中存在標籤,所以我希望能夠將多個標籤關聯到我的文章,我不想允許創建不存在的標籤。我想我的客戶端能夠使用id來引用標籤(以前會被提取)。因爲我打算在REST api和Web表單中使用我的表單,所以我希望我的客戶端能夠使用id來引用標籤(以前會提取)。

任何想法?

+0

你是如何解決問題了嗎? – JeanValjean

回答

1

您可以使用entity field typ e。它實際上是一個選擇字段類型,您可以渲染爲選擇有多個選擇或作爲列表的複選框。但是,如果您有很多標籤,則選項太多,用戶不會感到滿意。

因此,我建議實施一個Stackoverflow,如標記系統。

我通過使用Javascript tokeninput庫在項目中完成了它,例如loopj。 在實踐中:

  1. 你應該先呈現一個名爲tags的文本字段。

  2. 然後,您應該使用Javascript庫處理標記插入到該輸入字段以進行標記處理。

  3. 控制器將收到一個標記化的字符串,您必須處理它才能從Doctrine中檢索Tag個實體。

  4. 最後,檢索一個Tag實體列表,將它們分配給您的Article實體並刷新所有內容。

1

您可以使用somethig這樣的:

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

是的,正如我的建議!但是,如果您有幾十個標籤,它在實踐中並不有用!想象一下,Stackoverflow中的標籤數量顯示在一個獨特的選擇! – JeanValjean

相關問題