我有一个安装/配置了Doctrine的Zend Framework 2项目。我直接在实体上使用Zend Form注释来生成表单来显示/编辑实体数据。我遇到了一个问题:
具有以ManyToMany关系配置的子实体(Territory)集合的实体(Vendor)。学说关系工作得很好,但是我已经添加了zend形式的注释
/*
* ...doctrine annotations...
* @Annotation\Type("Zend\Form\Element\Collection")
* @Annotation\Options({"label":"Territory", "target_element": {"type": "\DocurepVendor\Form\TerritoryFieldset"}})
*/
创建我创建的fieldset对象,但不要将字段名称命名为数组。 (输入都是命名为city而不是city [])所以当我提交更新表单时,映射器需要一个数组,但只找到一个字符串并失败。
这是我的字段集代码。
TerritoryFieldset.php
namespace DocurepVendor\Form;
use \Zend\Form\Fieldset;
use \Zend\InputFilter\InputFilterProviderInterface;
class TerritoryFieldset extends Fieldset implements InputFilterProviderInterface {
public function __construct($name = null, $options = array()) {
parent::__construct('Locations', $options);
$this->setHydrator(new \Zend\Stdlib\Hydrator\ClassMethods())
->setObject(new \DocurepLocation\Entity\Territory());
$this->add(array(
'name' => 'city',
'options' => array(
'label' => 'City'
),
'attributes' => array()
))->add(array(
'name' => 'state',
'options' => array(
'label' => 'State'
),
'attributes' => array(
'required' => 'required'
)
));
}
public function getInputFilterSpecification() {
return array();
}
}
如果我将字段集中的名称设置为“city []”而不是“city”,则字段集甚至不会填充教条数据。
我不确定这是否需要在子元素字段集中配置,父元素的注释,完全在其他地方,或者如果这根本无法完成,我需要以另一种方式实现它。有人可以帮我推动正确的方向吗?
答案 0 :(得分:1)
我认为你应该使用Doctrine Hydrator而不是\ Zend \ Stdlib \ Hydrator \ ClassMethods()
use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;
..
$this->setHydrator(new DoctrineHydrator())