FuelPHPのバリデーションで、複数の項目のうちいずれか一つは必須。
みたいなのがデフォルトでなかったので忘れないようにメモ。
動作環境
FuelPHP 1.6
コード
/**
* 入力チェック:どれか一つ以上の入力が必須。エラーの場合labelをメッセージとして設定します。
* ex) add_rule(['required_either'=>$_valid_required_either], array('input1','input2','input3'));
*
* @param mixed $dummy ダミー引数、使用しない。※FuelPHPのValidationコールバックの第一引数は入力値が入ると決まっているためダミー引数を設置しています。
* @param array $fieldnames いずれか一つ以上の入力が必須な入力項目名。array(string, ...)
*
* @return bool
*/
$_valid_required_either = ['closure_required_either' => function($dummy, $fieldnames) {
\Validation::active()->set_message('closure_required_either', ':label がエラーです');
foreach ($fieldnames as $_key) {
if (\Validation::active()->input($_key, '')) {
return true;
}
}
return false;
}];
$vali = \Validation::forge();
// input1, input2, input3のどれか一つがなければ入力エラーにする。
$vali->add('dummy_require_either', 'いずれか入力')->add_rule($_valid_required_either, ['input1','input2','input3']);