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 を実装する Service Locator インジェクションを使用するなど、さまざまな解決策を試しました。

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 に答える