0

生の HTML をフォームにレンダリングするカスタム要素タイプを追加しました。さらに、カスタム エラー処理を行います (エラー項目を強調表示し、エラー メッセージをツールヒントとして追加します)。

すべてが機能します。カスタムエラー処理メソッドが検証エラーをキャッチした場合、私のカスタム(生のhtml)要素はまったく表示されません。

フォームの検証が失敗した場合、生の html アイテムがマークアップから取り除かれている理由を知っている人はいますか?

形:

class Sample_Form_Process extends Zend_Form
{

    [...]

    public function init()
    {

    [...]

        $this->addElement('rawText', 'spacer', array(
            'value' => '<br class="cl"/><div class="border-bottom"></div>',
        ));

    [...]

    }

    [...]

    public function highlightErrorElements()
    {
        foreach($this->getElements() as $element) {
            if($element->hasErrors()) {
                $element->setAttrib('class', 'error tooltip');
                $element->setAttrib('title', $element->getMessages());
            }
        }
    }
}

ProcessController クラス:

class Sample_ProcessController extends Zend_Controller_Action
{

    [...]

    public function addAction()
    {

        [...]

        if ($this->getRequest()->isPost()) {

            if ($form->isValid($request->getPost())) {

            [...]

            } else {
                $form->highlightErrorElements();
            }
        }
    }

    [...]

}

カスタム フォーム要素をレンダリングする RawText クラス:

class Zend_Form_Element_RawText extends Zend_Form_Element
{
    public function render(Zend_View_Interface $view = null)
    {
        return $this->getValue();
    }
}
4

1 に答える 1

1

isValid()メソッドをカスタム フォーム要素に追加して、true検証に合格するように常に返す必要があります。

public function isValid($value)
{
    return true;
}
于 2012-11-16T11:35:46.470 に答える