3

我有一个安装/配置了 Doctrine 的 Zend Framework 2 项目。我直接在实体上使用 Zend Form 注释来生成表单来显示/编辑实体数据。我遇到了一个问题:

具有以多对多关系配置的子实体(区域)集合的实体(供应商)。教义关系工作正常,但是我添加了 zend 表单注释

/*
 * ...doctrine annotations...
 * @Annotation\Type("Zend\Form\Element\Collection")
 * @Annotation\Options({"label":"Territory", "target_element": {"type": "\DocurepVendor\Form\TerritoryFieldset"}})
 */

创建我制作的字段集对象,但不要将字段名称命名为数组。(输入都命名为 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”,则字段集甚至不会填充教义数据。

我不确定这是否是我需要在子元素字段集、父元素的注释、其他地方完全配置的东西,或者这根本无法完成,我需要以另一种方式实现。有人可以推动我朝着正确的方向前进吗?

4

1 回答 1

1

我认为你应该使用 Doctrine Hydrator 而不是 \Zend\Stdlib\Hydrator\ClassMethods()

use DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator;

..

$this->setHydrator(new DoctrineHydrator())
于 2013-08-21T09:23:56.277 回答