概要
例えば、同じ required のバリデーションでも、
テキストフォームの場合だったら「○○を入力してください。」とし、
セレクトボックスの場合だったら「○○を選択してください。」としたくなる。
add_rule にクロージャを設定する方法
add_rule では、以下のようにクロージャを渡すことにより、
その場でルールを追加することができる。
sample.php
$val = Validation::forge();
$val->add('number', '数字')
->add_rule(['odd' => function($v) { return (bool)($v%2); }]);
これを利用して以下のように、
各フィールドごとに異なるエラーメッセージを設定する。
sample.php
$val = Validation::forge();
// クロージャを設定
// 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', '都道府県を選択してください。');
複数の場所で、同じバリデーション同じエラーメッセージを出力するのであれば、
独自バリデーションクラスを作成する方法をとったほうが良いと思う。
参考
Validation Errors - クラス - FuelPHP ドキュメント
http://fuelphp.jp/docs/1.7/classes/validation/errors.html