Zend_Form でバリデーション時に表示されるエラーメッセージを設定する。
Zend_Form を利用してフォームを作成する場合、エレメント毎にバリデーションやフィルタ等のオプションを設定するだけで、dl タグで装飾されたフォームが自動で生成されます。*1
今回はタイトルの通り、バリデーションのエラーメッセージの設定方法を説明します。
<?php class Form_Login extends Zend_Form { public function init() { $this->addElement('text', 'username', array( 'label' => 'Username', 'validators' => array( array('StringLength', false, array(3, 255, 'messages' => array( Zend_Validate_StringLength::TOO_SHORT => 'Usernameは%min%〜%max%文字で入力して下さい。', Zend_Validate_StringLength::TOO_LONG => 'Usernameは%min%〜%max%文字で入力して下さい。', ))), ), )); } }
※説明に不要な設定は省いておりますので、ご了承下さい。
上記のコードは Zend_Form の init() メソッドから各要素を登録する方法で実装しておりますが、他にも、Zend_Form をインスタンス化してから addElement() メソッドで登録しても構いません。
さて、肝心のバリデータ設定の説明に移ります、上記コードで addElement() メソッドの第三引数に連想配列として要素のオプションを渡しておりますが、ここの 'validators' というキーに割り当てられてる配列値が、複数のバリデータの設定郡となります。
入れ子構造になっており、読解しづらいですが、一つ一つの階層を見ていけば、そう難しくない事が分かるかと思います。
では、'StringLength' というバリデータについてみてみます。
<?php $stringlength => array('StringLength', false, array(3, 255, 'messages' => array( Zend_Validate_StringLength::TOO_SHORT => 'Usernameは%min%〜%max%文字で入力して下さい。', Zend_Validate_StringLength::TOO_LONG => 'Usernameは%min%〜%max%文字で入力して下さい。', ))),
この配列がそのまま順番通り Zend_Form_Element クラスの addValidator() メソッドの引数に割り当てられます。
つまり、上記の場合、第三引数がバリデータのオプションになるわけです。ここで、'messages' の添字を持つ配列をオプションに指定してやると、Zend_Form_Element クラスの _loadValidator() メソッド内でバリデータのデフォルトメッセージを上書きしてくれます。
ちなみに、このメッセージのキーと文章の書式は、「http://framework.zend.com/manual/ja/zend.validate.writing_validators.html」を参照されると良いでしょう。
尚、エラー文を翻訳するような処理にしている場合、このエラー文を英語で記述し、翻訳ファイルにその文に対応した日本語を書くようにするとより良いでしょう。
*1:ul タグにしたい場合もデコレーションの設定等で調整可能