Copy & Paste Engineer

【Laravel】バリデーションに無名関数を使用してバリデーションを行う

【Laravel】バリデーションに無名関数を使用してバリデーションを行う

Laravel でバリデーションに無名関数を使用してバリデーションを行う方法メモ 特殊なバリデーションでそこでしか使用しない、わざわざ独自ルールを作るのも手間などの時に使用する方法です。

サンプル

サンプルとして titlebody の値が同一ならエラーが出るようなものを書きました。 Laravelのドキュメントから改変したもののためControllerで記載するような形になっていますがFormRequestのruleでも同じような書き方は可能です。

/**
 * 新ブログポストの保存
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function store(Request $request)
{
    $validated = $request->validate([
        'title' => 'required|unique:posts|max:255',
        'body' => [
            'required',
            // $attribute 属性
            // $value 値
            // $fail 失敗処理
            function($attribute, $value, $fail) use($request) {
                // title と body の値が同じならエラーとする
                if($request->input('title') == $value){
                    $fail('Error!!' . $attribute);
                }
            }
        ]
    ]);

    // ブログポストは有効
}

参考