2013-05-30 51 views
0

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

回答

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类有一个构造需要,我需要用更换为一个循环的目标参数的自定义字段集建立了一个表格。我尝试了各种可能的解决方案来解决这个问题,例如使用Service Locator注入实现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' 
          ) 
      ), */ 

    );