2012-01-31 2 views
1

タイトルが示すように、Zend Frameworkのデコレータに関する質問があります。Zend:addElement()をファクトリとして使用しているときに、フォーム要素にデコレータを追加する方法はありますか?

$this->addElement('select', 'DisplayUntil', array(
    'label' => 'Display until:', 
    'multiOptions' => $this->getOptions(), 
    'filters' => array(
     'HTMLEntities', 
     'StringTrim', 
    ), 
    'validators' => array(
     'Int', 
    ), 
)); 

これは、フォームに要素を追加するための私の好みの方法です。ベストプラクティスを確立しようとする中で、私はメソッドチェインではなくファクトリメソッドの使用を標準化しました。どうして?私は個人的にそれをはるかに読みやすく、カスタムフォームクラスの長さを短くします。上記の例はきれいに動作しますが、デコレータを追加するために同じメソッドが使用されているドキュメントや例を探すのは苦労しています。だから、同じコードスニペットを使用して、私はデコレータを追加するときは、次の操作を行いますと仮定:

$this->addElement('select', 'DisplayUntil', array(
    'label' => 'Display until:', 
    'multiOptions' => $this->getOptions(), 
    'filters' => array(
     'HTMLEntities', 
     'StringTrim', 
    ), 
    'validators' => array(
     'Int', 
    ), 
    'decorators' => array(
     'ViewHelper', 
     'Label' => array(
      'tag' => 'dt' 
     ), 
     'HtmlTag' => array(
      'tag' => 'div', 
      'openOnly' => true, 
      'id' => 'divDisplayUntil', 
      'placement' => 'prepend', 
     ), 
    ), 
)); 

は、残念ながら、私は 『DTは』レジストリに見つかりませんでした名前で、」プラグインを受信し、使用するパス:Zend_Form_Decorator_:Zendの/ Form/Decorator/"というエラーメッセージが表示されます。私はかなり新しいZendです。誰かが前のコードの例をどのように動作させるかを私に見せてもらえると感謝します。この方法も可能ですか?

ありがとうございました!

答えて

2

デコレータにはもう1つの配列のレイヤがあるようです。これは、1.1倍マニュアルからである:あなたのケースでそう

$this->addDecorators(array(
    array('ViewHelper'), 
    array('Errors'), 
    array('Description', array('tag' => 'p', 'class' => 'description')), 
    array('HtmlTag', array('tag' => 'dd')), 
    array('Label', array('tag' => 'dt')), 
)); 

'decorators' => array(
    array('ViewHelper'), 
    array('Label', array(
     'tag' => 'dt' 
     ) 
    ), 
    array('HtmlTag', array(
     'tag' => 'div', 
     'openOnly' => true, 
     'id' => 'divDisplayUntil', 
     'placement' => 'prepend', 
     ) 
    ), 
), 
+0

を試し意見をいただきありがとうございます。しかし、それはうまくいきません。 – Hegemon

+0

はい、そのようなネスティングを要求するのはむしろ奇妙です。多分それが必要な場合があります。 – bububaba

関連する問題