2012-04-25 51 views
2

我的問題如下。除了symfony2數據庫中的內容之外還添加自定義的值

我有一個下拉的表單生成器從數據庫成功地檢索數據列表。

public function buildForm(FormBuilder $builder, array $options) { 
      $builder->add('Statusname', 'entity', array('empty_value' => 'All','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },)) 
} 

它工作正常。 但是,當我加入我的自定義數據

'not closed' => 'Not closed' 

到下拉列表中即

public function buildForm(FormBuilder $builder, array $options) { 
      $builder->add('Statusname', 'entity', array('empty_value' => 'All','not closed' => 'Not closed','class' => 'MyProject\EntityBundle\Entity\IssueStatusType', 'property' => 'name', 'required' => false,'query_builder' => function ($repository) { return $repository->createQueryBuilder('es')->orderBy('es.name', 'ASC'); },)) 
} 

這是行不通的。有人能告訴我爲什麼?

在此先感謝。

+0

如果您使用實體字段類型,你canno't添加這樣的選項,只需添加您還可選擇在表IssueStatusType「不是封閉的」,這將是展示在你的選擇框。關於實體領域的更多信息:http://symfony.com/doc/current/reference/forms/types/entity.html] – Snroki 2012-04-25 10:06:39

+0

我無法添加「不是封閉的」爲表IssueStatusType將在很多地方可以使用我的不能顯示「未關閉」選項的項目。 – 2012-04-25 10:23:00

+0

所以你可以嘗試使用你的表格中的選項來選擇字段,就像在這篇文章中一樣:http://stackoverflow.com/a/9491847/1259367只需在選項中添加選項'not closed'即可。但如果你在這個領域有聯繫,我不確定這會起作用。 – Snroki 2012-04-25 11:36:06

回答

5

爲FormBuilder第三參數:: Add()方法是選項的asoociative陣列。 '未關閉'不是一個有效的選項,因此它不起作用。

在你的情況,你必須手動創建自定義的收集和使用「選擇」類型。 爲了使它工作,你必須注入實體管理器到你的表單類型。 這是一個最低限度的例子:

class IssueType extends AbstractType 
{ 
    private $entityManager; 

    public function __construct(EntityManager $entityManager) 
    { 
     $this->entityManager = $entityManager; 
    } 

    public function buildForm(FormBuilder $builder, array $options) 
    { 
     $builder->add('Statusname', 'choice', array(
      'empty_value' => 'All', 
      'required' => false, 
      'choices'  => $this->buildStatusNames(), 
     ) 
    } 

    private function buildStatusNames() 
    { 
     $choices = array(); 
     $types = $this 
      ->entityManager 
      ->getRepository('MyProject\EntityBundle\Entity\IssueStatusType') 
      ->createQueryBuilder('es') 
      ->orderBy('es.name', 'ASC') 
      ->getQuery() 
      ->getResult(); 

     foreach ($types as $type) { 
      // I assume key is retrieved by getId 
      $choices[$type->getId()] = $type->getName(); 
     } 

     $choices['not closed'] = 'Not closed'; 

     return $choices; 
    } 
} 
+0

你真的嘗試過嗎?我不太確定這在處理關係時會起作用。最終你需要的是物體而不僅僅是身份證件。 – Cerad 2012-04-25 13:33:22

+0

不,來自選項的數據選項僅用於構建表單視圖,通過數據轉換器(使用id)完成綁定。而且你不能使用對象作爲數組鍵。 – 2012-04-25 17:09:47

+0

我們中的一個人很困惑。再一次,你真的嘗試過你的方法嗎?請記住,目標是建立對象之間的關係,而不僅僅是存儲id。你看過EntityType做什麼了嗎? – Cerad 2012-04-25 21:04:12

0

實體關係的實體進行管理,在這裏你正在爲其中將包含ID和可讀的名稱爲您的用戶視圖的形式。

當表單提交,搶使用id作爲JF西蒙上面提到並提交對象,只要你已經在你的實體正確設置好一切,Symfony的會照顧休息。

相關問題