2011-09-28 10 views
6

次のZend Formがエラーをスローするという問題があります。 問題は "ファイル"要素であり、setElementDecoratorsを使用しています。Zendファイルアップロードと要素デコレータ

class Products_AddForm extends Zend_Form 
{ 
    function init() { 

     // other form elements... 

     $uploadElement = new Zend_Form_Element_File('Excel'); 
     $uploadElement->setLabel('Excel'); 
     $this->addElement($uploadElement); 

     $this->setElementDecorators(array(
      'ViewHelper', 
      'Errors', 
      array(array('data' => 'HtmlTag'), array('tag' => 'td')), 
      array('Label', array('tag' => 'th')), 
      array(array('row' => 'HtmlTag'), array('tag' => 'tr')) 
     )); 



    } 
} 

これはエラーをスローします。

動作します SetElementDecorators後に終わり $uploadElement->addDecorator('File');を追加
(Warning: Exception caught by form: No file decorator found... unable to render file element Stack Trace: #0) 

が、これは私のファイル要素を二回行います!

誰でも助けてください。 Zend_Form_Decorator_File -

TIA マット

答えて

10

ファイルの要素は、それ自身のデコレータが必要です。

$this->setElementDecorators(array(
     'File', 
     'Errors', 
     array(array('data' => 'HtmlTag'), array('tag' => 'td')), 
     array('Label', array('tag' => 'th')), 
     array(array('row' => 'HtmlTag'), array('tag' => 'tr')) 
)); 

[編集]

はちょうどあなたが、他のフォーム要素を使用していることに気づきました。あなたの元のコードの後

、追加:

$this->getElement('Excel')->setDecorators(
    array(
     'File', 
     'Errors', 
     array(array('data' => 'HtmlTag'), array('tag' => 'td')), 
     array('Label', array('tag' => 'th')), 
     array(array('row' => 'HtmlTag'), array('tag' => 'tr')) 
    ) 
); 

その方法を、なViewHelperは、他のすべての要素に追加され、お使いのファイルの要素ファイルの代わりに使用されます。

+0

ありがとう4 ur help。これを追加する:警告:フォームによってキャッチされた例外:メソッドgetMaxFileSizeが存在しませんスタックトレース:#0 – frgtv10

+0

私の答えを更新しました: –

+0

は動作します。 havntはzendのドキュメントでこれを気づいた! :/ありがとう! – frgtv10

関連する問題