6

次のZendフォームがエラーをスローするという問題があります。問題は「ファイル」要素とsetElementDecoratorsの使用です。

    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'))
        ));



    }
}

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

(Warning: Exception caught by form: No file decorator found... unable to render file element Stack Trace: #0 ) 

$uploadElement->addDecorator('File');の後に最後に追加するSetElementDecoratorsと機能しますが、これによりファイル要素が2回得られます!

誰か助けてもらえますか?

TIAマット

4

1 に答える 1

10

File要素には、独自のデコレータであるZend_Form_Decorator_Fileが必要です。

$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が他のすべての要素に追加され、File要素には代わりにFileが使用されます。

于 2011-09-28T09:23:40.020 に答える