zf2 フォームアノテーションで困っています。問題は次のとおりです。単純な要素を持つ注釈を含むフォームがありますが、フォーム注釈にフィールドセットを追加する必要があります。フィールドセットにはいくつかのテキスト要素が含まれています。ここまでは、コントローラーで annotationBiulder と CreateForm メソッドを使用してフォームを作成するのに問題はありませんでした。しかし、いくつかのパラメーターをコンストラクターのフィールドセットに渡したい場合、アノテーションを使用してフィールドセットを呼び出すことはできません。これに対する解決策はありますか?
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 に答える