2

私はzendフレームワーク1.12で1つのプロジェクトに取り組んでいます。デコレータを生成するために、「Zend_Form」を拡張する1つのクラス「Application_Form_Base」を作成しました。このクラスのコードは、フォームにラベルデコレータを使用して新しい要素を追加すると、そのラベルに1つのcssクラス「field_label」が適用されます。問題は、あるフォームでは、実行時にラベルのこのcssクラスを削除したいということです。誰かが考えを持っています、フォーム要素をレンダリングするときに実行時にこのcssクラスを削除するにはどうすればよいですか?

以下は私の中間フォームクラスです

<?php

class Application_Form_Base extends Zend_Form
{

public $elementDecorators = array(
        'ViewHelper',
        'Errors',
        array(
                'label',
                array(                          
                        'class' => 'field_label'
                )
        ),
        array(
                array(
                        'row' => 'HtmlTag'
                ),
                array(
                        'tag' => 'div',
                        'class' => 'form-row'
                )
        )
);

public $buttonDecorators = array(
        'ViewHelper',
        array(
                array(
                        'label' => 'HtmlTag'
                ),
                array(
                        'tag' => 'label',
                        'placement' => 'prepend',
                        'class'=>'field_label'
                )
        ),
        array(
                array(
                        'row' => 'HtmlTag'
                ),
                array(
                        'tag' => 'div',
                        'class' => 'form-row'
                )
        )
);

public function loadDefaultDecorators ()
{
    $this->setDecorators(
            array(
                    'FormElements',
                    array(
                            'HtmlTag',
                            array(
                                    'tag' => 'div',
                                    'class' => 'zendForm'
                            )
                    ),
                    'Form'
            ));
}
}

以下は私の検索フォームの抜粋です

class Admin_Form_SubscribeSearch extends Application_Form_Base
{

public function init()
{
    $locale = Zend_Registry::get('Zend_Translate');

    /* Form Elements & Other Definitions Here ... */

    $this->setMethod('post');
    $this->setName('searchPackage');

    $this->addElement('text','name',array(
        'label'=>$locale->translate('label_name'),
        'required'=>true,
        'decorators'=> $this->elementDecorators,
        'filters'=>array('StringTrim'),
        'class'=>'',   
    ));

以下は、そのフォームフィールドに対して生成されたhtml出力です。

<label class="field_label required" for="price">name</label>

ビューでフォーム要素をレンダリングするときに、この'field_label'クラスを削除したいと思います。どうすればこれを達成できますか?

4

1 に答える 1

0

特定の要素に特定のデコレータを設定できます。

$element = $this->getElement('name');
$element->setDecorator(array('Label')); // without additional class
于 2012-09-19T08:12:04.067 に答える