aの値が3の時、bを必須入力にしたい場合、リクエストクラスに以下を追記すればOK
use Illuminate\Validation\Validator;
public function withValidator(Validator $validator)
{
$validator->sometimes('b', 'required', function($input){
return $input->a == 3;
});
}
returnがtrueなら、bカラム(sometimes()の第1パラメータ)がrequired(sometimes()の第2パラメータ)というバリデーションルールが追加される。
returnがtrueなら追加されるので
return $input->a == 1 && $input->c == 1や
return $input->a == 1 || $input->a == 2などのように
ANDまたはOR条件を組み合わせても良い。
ルールはrules()のルールに追加される。
同じルールがあった場合、上書きされる。
こんな書き方もできる
public function withValidator(Validator $validator)
{
$validator->after(function ($validator) {
if ($this->_is_error()) {
$validator->errors()->add('memo', '10文字で入力して下さい');
}
});
}
private function _is_error()
{
// なんらかのチェックをして、エラーがあればtrue、なければfalseを返すようにする
return true;
}
_is_error()でなんらかのチェックを行い、trueを返すとmemo入力タグに’10文字で入力して下さい’というエラーメッセージが表示される。
Ruleクラスを作らなくてもRequestクラスでわりといろいろなことが出来てしまう。