1

zend_form のカスタム マークアップがあり、css クラス ( class="hasErrors" ) を入力フィールドに設定しようとしています。レンダリングされたフォーム要素は次のようになります。

<div id="teamname-element" class="formRow">
    <input type="text" name="teamname" id="teamname" value="" placeholder="Teamname">
</div>

エラーがあると、次のようになります。

<div id="teamname-element" class="formRow">
    <input type="text" name="teamname" id="teamname" value="" placeholder="Teamname">
    <ul class="errors">
        <li>Your teamname is to short!</li>
    </ul>
</div>

javascriptを使わずにcssクラスを入力フィールドに設定することはできますか?

<input class="hasErrors" type="text" name="teamname" id="teamname" value="" placeholder="Teamname">

フォーム要素は次のように作成されます。

$this->addElement(new Nut_Form_Element_Text('teamname', array(
    'Label'      => 'Teamname',
    'validators' => array( array('StringLength', FALSE, array(1, 25)), $TeamRegex),
    'filters'    => array('StringTrim', 'StripTags'),
)));
4

1 に答える 1

1

ここでは、Zend_Form を拡張するフォーム クラスを作成します。isValid() メソッドをオーバーライドします。form->elements をループし、hasErrors() メソッドが true を返す場合、「エラー」のクラスを追加します。また、getAttrib() メソッドを使用してクラス属性が既に存在するかどうかを確認し、存在する場合はスペースで区切って「エラー」クラスを追加します。

class MyForm extends Zend_Form
{
    public function isValid($data)
    {
        $valid = parent::isValid($data);

        foreach ($this->getElements() as $element) {
            if ($element->hasErrors()) {
                $oldClass = $element->getAttrib('class');
                if (!empty($oldClass)) {
                    $element->setAttrib('class', $oldClass . ' hasError');
                } else {
                    $element->setAttrib('class', 'hasError');
                }
            }
        }

        return $valid;
    }
}

これで、isValid メソッドを呼び出すと、検証に合格しなかったフィールドにエラーのクラスが自動的に追加されます。

于 2012-09-01T19:43:43.637 に答える