[fuelPHP]requiredのエラーメッセージでセレクト項目は「◯◯を選択してください」にする
- 公開日:2015/8/21
この記事は最終更新日から10年以上が経過しています。
同じrequiredのバリデーションでも、
テキストフォームの場合は「◯◯を入力してください。」とし、
セレクトボックスやチェックボックスでは「◯◯を選択してください。」としたいことがあります。
これは、add_ruleにクロージャを設定する方法で解決できます。
ただし、セレクトボックスやチェックボックスで繰り返し同じメッセージを出すことになりそうなら、独自バリデーションクラスを作成した方が良いと思います。
というわけで、それぞれの方法をメモ。
その1)add_ruleにクロージャを設定する方法
Modelクラスのvalidateでクロージャを設定し、フィールドごとにメッセージをセットします。
public static function validate($factory)
{
$val = Validation::forge($factory);
// クロージャを設定
// Validation の _validation_required メソッドを利用する
$required_rule = function ($v) use ($val) { return $val->_validation_required($v); };
// テキストフォーム
$val->add('name', 'お名前')
->add_rule(['required_name' => $required_rule]);
$val->set_message('required_name', 'お名前を入力してください。');
// セレクトボックス
$val->add('pref', '都道府県')
->add_rule(['required_pref' => $required_rule]);
$val->set_message('required_pref', '都道府県を選択してください。');
}
その2)独自バリデーションクラスを作成する方法
fuel/app/classes/myvalidationrules.php
(なければファイルを作成)
class MyValidationRules
{
/**
* Required(セレクトボックス・チェックボックス用)
* requiredでエラーメッセージを「◯◯を選択してください。」にするための拡張クラス
*/
public static function _validation_required_select($val)
{
return ! ($val === false or $val === null or $val === '' or $val === array());
}
}
Modelクラスのvalidateでadd_callableで独自バリデーションクラスを呼び出し、対象のフィールドでは「required」ではなく、追加した「required_select」を指定します。
public static function validate($factory)
{
$val = Validation::forge($factory);
$val->add_callable('MyValidationRules'); //独自バリデーションクラスを追加
$val->add_field('name', 'お名前', 'required');
$val->add_field('pref', '都道府県', 'required_select');
return $val;
}
汎用的なバリデーションは独自クラスとして追加すると便利。
フォルダ