2013-05-30 3 views
0

У меня возникла проблема с аннотацией zf2. Проблема в том, что: a имеют форму с аннотациями с простыми элементами, но мне нужно добавить набор полей в аннотацию формы. Поле содержит несколько текстовых элементов. До сих пор у меня нет проблем с созданием формы в контроллере с помощью метода annotationBiulder и CreateForm. Но если я хочу передать некоторые параметры в набор полей конструктора, невозможно вызвать набор полей с аннотацией. Есть ли решение для этого?form constructor and annotation bialder

ответ

0

Я не думаю, что это решение моей проблемы , У меня есть форма, построенный с аннотацией и с пользовательской FIELDSET внутри имени 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' 
          ) 
      ), */ 

    );