[fuelPHP]requiredのエラーメッセージでセレクト項目は「◯◯を選択してください」にする
- 公開日:2015/8/21
この記事は最終更新日から9年以上が経過しています。
同じ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; }
汎用的なバリデーションは独自クラスとして追加すると便利。