エラーメッセージの分岐

一つのフィールドで複数のエラーを検知したい場合があります。例えば以下のように、必須だけではなく、数値のみ許可したり、最大数値を設定したりです。

  • 必須
  • 数値のみ許可
  • 100以下の数値を許可

今ままでのエラー表記

ここまでで紹介したエラー表記の仕方は、以下のようなコードでした。

<input type="text" name="age" value="{age}">
<input type="hidden" name="field[]" value="age">
<input type="hidden" name="age:validator#required"> <!-- 必須チェック -->
<input type="hidden" name="age:validator#digits"> <!-- 数値チェック -->
<input type="hidden" name="age:validator#max" value="100"> <!-- 最大数チェック -->

<!-- BEGIN age:validator --><p class="notice">年齢が入力されていないか、数値(100以下)が入力されていません。</p><!-- END age:validator -->

間違ってはいませんが、どのエラーにひっかかっているのか判りにくいです。

エラーにあわせてメッセージを変える

<input type="text" name="age" value="{age}">
<input type="hidden" name="field[]" value="age">
<input type="hidden" name="age:validator#required"> <!-- 必須チェック -->
<input type="hidden" name="age:validator#digits"> <!-- 数値チェック -->
<input type="hidden" name="age:validator#max" value="100"> <!-- 最大数チェック -->

<!-- BEGIN age:validator#required -->
<p class="notice">年齢を入力してください。</p><!-- END age:validator#required --><!-- BEGIN age:validator#digits -->
<p class="notice">年齢には数値を入力してください。</p><!-- END age:validator#digits -->><!-- BEGIN age:validator#max -->
<p class="notice">年齢には100以下の数値を入力してください。</p><!-- END age:validator#max -->

エラーメッセージが分岐され必要なメッセージだけが出力されるようになりました。

このようにエラーメッセージ用のブロックを書き換える事で、複数のバリデーターを設定した場合のエラーで、別々のメッセージを表示させることができます。

<!-- BEGIN [対象の項目名]:validator#[オプション名] --><p>[エラーメッセージ]</p><!-- BEGIN [対象の項目名]:validator#[オプション名] -->

特殊なエラーメッセージ

フォームでファイルをアップロードする時に upload_max_filesize を超えた場合、POSTが空になるのでフィールド毎にエラーは出せない。 なので以下の記述で全体のエラーメッセージを出力。

<!-- BEGIN post:v#filesize -->リクエストサイズが大きすぎます<!-- END post:v#filesize -->