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