2012-07-17 66 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),所以当我编辑用户时,我需要一个'