Laravel8 わりと複雑なことができるwithValidator()が便利

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クラスでわりといろいろなことが出来てしまう。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です