2

ラベルに HTML を含む Zend テキスト要素があります。オプションを追加することで、Zend がそこに HTML をエスケープするのを止めることができ->setOption('escape', false);ます。これは期待どおりに機能します。

ただし、エラーが発生した場合、エラー メッセージのタイトルとして HTML エスケープされたラベルが表示されます。次のようなものが得られます。

<strong>First</strong> name
Please enter your first name

これを回避する方法をいくつか考えていますが、どちらも可能かどうかはわかりません。エラーの形式を変更して、入力ラベルを直接使用しないようにすることはできますか? または、Zend がエラーで HTML をエスケープするのを止める方法はありますか?

編集:入力の横に各入力エラーを表示していません。代わりに、すべてのエラーをグループ化して一度に表示しています。各要素にはエラー デコレータが削除されています。

$firstName->removeDecorator('Errors');

そして、FormErrorsデコレータを追加してグループとして表示しています:

$myForm->setDecorators(array('FormErrors', ....));

これが、入力のラベルがエラーリストの一部として表示される原因だと思います。

4

1 に答える 1

0

デコレータを使用している場合FormErrors、ラベルのエスケープを停止する方法は 2 つあります。

最初のオプション: メソッドを使用して別の Zend_View エスケープ コールバックを指定するZend_View::setEscape2 番目のオプション: カスタムFormErrorsデコレータを作成し、renderLabelメソッドをオーバーライドします。

例:

class My_Form_Decorator_FormErrors extends Zend_Form_Decorator_FormErrors
{
    public function renderLabel(Zend_Form_Element $element, Zend_View_Interface $view)
    {
        return $this->getMarkupElementLabelStart()
             . $element->getLabel()
             . $this->getMarkupElementLabelEnd();
    }    
}

class Forms_Example extends Zend_Form
{
    public function init()
    {
        /* ... */
        $this->addPrefixPath('My_Form_Decorator', 'My/Form/Decorator', 'decorator');
        /* ... */   
    }
}
于 2013-07-16T06:01:30.630 に答える