0

我在使用 zf2 表单注释时遇到了麻烦。问题是:有一个带有简单元素注释的表单,但我需要在表单注释中添加一个字段集。字段集包含一些文本元素。到这里为止,我可以使用 annotationBiulder 和 CreateForm 方法在控制器中创建表单。但是如果我想将一些参数传递给构造函数字段集,则无法调用带有注释的字段集。有解决方案吗?

4

2 回答 2

0

我不认为这是我的问题的解决方案。我有一个使用注释构建的表单,其中包含一个名为 MyFieldset 的自定义字段集

/**
 * @Form\Hydrator("Zend\Stdlib\Hydrator\ObjectProperty")
 * @Form\Name("MyForm")
 */

class MyForm {

 /**
 * @Form\Required(false)
 * @Form\Attributes({"type":"hidden"})
 */
protected $id;

/**
 * @Form\Required(true)
 * @Form\Type("Zend\Form\Element\Text")
 * @Form\Options({"label":"Title"})
 * @Form\Filter({"name":"StringTrim"})
 * @Form\Filter({"name":"StripTags"})
 * @Form\Validator({"name": "StringLength", "options": {"min":3, "max": 250}})
 */
protected $title;

/**
 * @Form\Required(true)
 * @Form\Type("Zend\Form\Element\Text")
 * @Form\Options({"label":"Description"})
 * @Form\Filter({"name":"StringTrim"})
 * @Form\Filter({"name":"StripTags"})
 */
protected $description;

/**
 * @Form\Required(false)
 * @Form\Type("Application\Form\MyFieldset")
 * @Form\Hydrator("Zend\Stdlib\Hydrator\ObjectProperty")
 * @Form\Options({"label":"Translations"})
 * @Form\Filter({"name":"StringTrim"})
 * @Form\Filter({"name":"StripTags"})
 */
protected $translations;

MyFieldset 类有一个需要对象参数的构造函数,我需要用它来替换 for 循环。我尝试了各种可能的解决方案来解决这个问题,例如使用实现 ServiceLocatorAwareInterface 的服务定位器注入。

class MyFieldset extends Fieldset implements InputFilterProviderInterface {

protected $obj;

public function __construct(SomeObject $obj) {

    parent::__construct('myfieldset');

    $this->obj = $em;
}

public function init() {

    for ($i=0;$i<2;$i++) {

        $object = new Element\Text();

        $object
            ->setAttribute('name', 'myfieldset_'.$i)
            ->setOptions(array('label' => 'Myfieldset'))
        ;//->setAttribute('required', true);

        $this->add($object);
    }
}

public function getInputFilterSpecification() {

    return array(
            /* 'name' => $this->getName(),
            'required' => true,
            'filters' => array(
                    array('name' => 'Zend\Filter\StringTrim'),
                    array('name' => 'Zend\Filter\StringToLower'),
            ),
            'validators' => array(
                    array(
                                    'name' => 'String'
                            )
            ), */

    );
于 2013-06-03T21:15:26.680 回答
0

用于字段集

  • @Annotation\ComposedObject("命名空间/实体/MyEntity")

http://devblog.x2k.co.uk/using-the-composedobject-zend-framework-2-form-annotation/

于 2013-06-03T09:31:47.430 回答