Quantcast
Channel: メドピア開発者ブログ
Viewing all articles
Browse latest Browse all 214

Laravel5.0:FormRequestを使ったValidation

$
0
0

はじめまして。 メドピアエンジニアの酒井です。

まだ使い始めてそんなに経っていませんが、Laravelの小ネタを紹介したいと思います。

Laravel5.0で導入されたFormRequestを使用して Controllerをスッキリさせる方法です。

Laravelを触ったのは5.0が始めてですが。

実際に見てみる

まず、最初に通常のValidationの書き方はこんな感じです。

<?phpuse App\Http\Requests\Request;

Class SampleController extends Controller
{publicfunction getIndex(Request $request){$validator= Validator::make($request->all(), ['name'=>'required',
            'email'=>'required|email']);
        if($validator->fails()){}}}

見ても分かるようにContollerに記述していくとForm項目が増えるにつれ、 Controllerに大量のValidation設定を記述する事になります。

次にFormRequestを使用したControllerです。

<?phpuse App\Http\Requests\SampleRequest;

Class SampleController extends Controller
{publicfunction getIndex(SampleRequest $request){}}

すっきりしましたね!

FormRequestって何?

Laravel5.0から導入されたValidation処理を含んだRequestクラスとなります。

詳しくはこちら

リクエストをdispatchした際、Controllerメソッドの依存関係を解決した後に validate()が実行されるようになっています。

つまり、FormRequestを使用するとControllerメソッドの実行前に Validationの実行が完了している事になります。

FormRequestの使い方

<?phpuse App\Http\Requests\Request;

Class SampleRequest extends Request
{//認証ユーザーが権限あるかチェックするpublicfunction authorize(){returntrue;
    }//Validationの設定publicfunction rules(){return['name'=>'required',
            'email'=>'required|email']}//エラー文言の設定publicfunction messages(){return['name.required'=>'The :attribute field is required.',
            'email.required'=>'The :attribute field is required.',
            'email.email'=>'The :attribute must be a valid email address.',
        ];
    }}

public function authorize()

権限チェックする必要ない場合もこれを指定しないとエラーとなりますので 必ず記述するようにします。

あとはviewに以下のように記述すれば、Form画面にエラーを出力できるようになります。

@if (count($errors) > 0)
    @foreach ($errors->all() as $error)
        {{ $error }}
    @endforeach
@endif

エラー時のリダイレクト先は特に指定がなければ、前画面(Form画面)になります。

頻度の高いValidationルール

rule内容
alpha英字チェック
alpha_num英数字チェック
between:min,max最小値と最大値チェック
emailメールアドレスチェック
numeric数字チェック
regex正規表現によるチェック ※1
required入力値の存在チェック
same:field指定されたフィールドとの同値チェック

詳しくはこちら

※1 regexで「|」を使用する場合はrulesの指定を配列にしないと動作しません。

<?phppublicfunction rules(){return['sort'=>['regex:/^(desc)|(asc)$/']]}}

これでしばらくハマりました。。。

まとめ

Illuminate\Foundation\Http\FormRequestを見ると リダイレクト先やエラー時の挙動を変更できるようになっているので、 Validation関連のだいたいの事はFormRequestで行えると思います。

ControllerがValidation設定ばかりになってきたら、 FormRequestの利用を検討してみるのもいいかもしれませんね。


Viewing all articles
Browse latest Browse all 214

Trending Articles