Laravelでバリデーションをモデルにまとめて記載する。

LaravelでRESTfulなルーティングをしていまいした。

  1. items/create 新規作成画面
    2.POST送信(POST items/ )
    3.カスタムリクエストでバリデーション)
    →エラー発生時に自動で items/create にリダイレクト
    4.items/create 画面にエラー表示

大きな不満はなかったのですが、3の瞬間になにかしたくなる。or リクエストファイルを作るのが面倒そうなどあり、Modelに無理やり書いてみた。

<?php

namespace App;

use IlluminateDatabaseEloquentModel;
use SymfonyComponentHttpFoundationRequest;
use Validator;

class Products extends Model
{
    
    /**
     * create Validator Instance
     *
     * @param  IlluminateHttpRequest $request
     * @return IlluminateValidationValidator
     */
    
    public static function getValidator(Request $request)
    {
        $validator = Validator::make(
            $request->all(),
            [
                'name' => 'required',
                'jan' => 'required',
            ],
            [
                'name.required' => '名は必須項目です。',
                'jan.required' => 'JANコードは必須項目です。'
            ]
            );
        return $validator;
    }
    
}

まぁさほどモデルがコードが増えることは無さそうなので、これである程度シンプル・手が届きやすくなりそう。(カスタムリクエストにする方がベストプラクティスっぽくあるが、お一人開発なのでとりあえず。