2013-05-30 52 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' 
          ) 
      ), */ 

    );