2012-07-17 135 views
0

今天我開始讀自己的功能Zend \ Form。我找到了Michael Gallego的great tutorial,他在其中解釋瞭如何使用一些新的酷炫功能。Zend Form與Doctrine 2和ManyToOne的關係

如果我們正在處理1-1關係,該示例工作良好。學說涵蓋了他們。

我想要做的是

  • ,而不必爲相關值textarea的,我想一個選擇框
  • 的選擇框應具有有效的選項,這取決於在數據庫
  • 什麼
  • 進行後期編輯的目的,當前選擇的值需要選擇
  • 主義不應該添加新的行一表

正如您在my github sources中看到的,我使用了本教程中的示例,但將其縮短爲「產品」和「品牌」。品牌 - 在我的例子中 - 是一個帶有預定義品牌(耐克,阿迪達斯,彪馬等)的數據庫表,當您從表單創建新產品時,您可以將這些品牌作爲選擇菜單。

現在,我添加選項的方式不起作用。我知道我可以手動設置選項像一個數組像

$form->get('product')->get('brand')->setAttribute('options', array('Nike'=>'1', 'Adidas'=>'2', etc); 

但我強烈認爲有一個更自動的方式來做到這一點。我只是不明白Zend提供的所有Hydrator類。

問題是,即使我手動定義數組,如上所述,產品和品牌的映射不能正常工作。的$product轉儲現在看起來是這樣的

object(Application\Entity\Product)[210] 
    protected 'id' => null 
    protected 'name' => string 'asdasd' (length=6) 
    protected 'price' => string '123123' (length=6) 
    protected 'brand' => 
    object(Application\Entity\Brand)[215] 
     protected 'id' => null 
     protected 'name' => string '1' (length=1) 

顯然該品牌被映射完全錯誤的(什麼我想要實現,Zend公司可能認爲這是正確的,因爲我選擇的值爲1)。

問題如何告訴我的表單將選擇值映射到映射的對象ID?雖然在這種情況下,我設置產品模型的方式可能是錯誤的。

任何幫助,將不勝感激:)

+0

有關如何使用ZF2水合器獲得此項工作的任何更新?我正在實現一個hack,它可以從一個實體手動構造一個數組,並使用'setValueOptions'來設置它。你如何鏈接關聯的實體與選擇下拉菜單?例如:用戶可以有多個客戶端(ManyToMany),所以當我編輯用戶時,我需要一個'