ルール名*1ごとに一般的なエラーメッセージを用意しておく。
こうしておくことでいちいちバリデーションのmessageを書かなくても済んでかなり楽ちん。
<?php class AppModel extends Model { static $error = array( "postal" => "郵便番号の形式が正しくありません。", "cc" => "クレジットカード番号の形式が正しくありません。", "date" => "日付の書式が正しくありません。(入力例:2009-01-01)", "email" => "メールアドレスの形式が正しくありません。", "url" => "URLの形式が正しくありません。", "ip" => "%sのIPアドレスの形式が正しくありません。", "extension" => "%sのファイル形式が正しくありません。", "inList" => "%sに不正な値が指定されました。", "blank" => "%sにスペース、タブ、改行以外の文字が含まれています。", "decimal" => "%sは小数点以下%d桁の値で入力してください。", "range" => "%sは%dより大きく、%dより小さい値で入力してください。", "isGreater" => "%sは%3\$dより大きい値で入力してください。", "isLess" => "%sは%3\$dより小さい値で入力してください。", "greaterOrEqual" => "%sは%3\$d以上の値で入力してください。", "lessOrEqual" => "%sは%3\$d以下の値で入力してください。", "notEqual" => "%sは%3\$d以外の値で入力してください。", "isUnique" => "この%sはすでに使用されています。", "between" => "%sは半角%d〜%d文字の間で入力してください。", "minLength" => "%sは%d文字以上で入力してください。", "maxLength" => "%sは%d文字以内で入力してください。", "alphaNumeric" => "%sは半角英数で入力してください。", "numeric" => "%sに数字以外の文字が入力されています。", "equalTo" => "%sが%sではありません。", "notEmpty" => "%sに何も入力されていません。"); function invalidFields($options = array()) { $errors = parent::invalidFields($options); foreach($errors as $key => $val) { if(array_key_exists($val, AppModel::$error)) { $params = $this->validate[$key][$val]["rule"]; if(is_array($params)) $params[0] = $this->getColumnAliasName($key); else $params = $this->getColumnAliasName($key); $errors[$key] = vsprintf(AppModel::$error[$val], $params); } } $this->validationErrors = $errors; return $errors; } } ?>
invalidFields中のgetColumnAliasName()はカラムの別名取得メソッド。
通常はフィールド名がDBのカラム名(英語名)になるので、
モデルにカラムの別名(Japanese名)を持っておき、表示にはそっちを使用するようにしてます。
<?php class Test extends AppModel { var $validate = array("content" =>array( "between" => array("rule" => array("between", 4, 32)), "alphaNumeric" => array("rule" => "alphaNumeric"), "notEmpty" => array("rule" => "notEmpty", "message" => "何も入力してないよ〜ん"))); } ?>
messageを指定すればそこだけ上書きすることも。
*1:ここでのルール名は実際のルール名(バリデーションメソッド名)ではなく、こちらで指定する任意のルール名。これならかなり細かくメッセージパターンを分けることが出来る。