Laravel

【初心者向け】Laravelのフォームリクエストでバリデーションする方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel のフォームリクエストを使ってバリデーションを実装していきます。フォームリクエストを使う理由としては、コントローラーの記述を減らすことによる可読性の向上にあります。

ぜひチャレンジしてみましょう。

前回作った一番シンプルなバリデーションをフォームリクエストで実装してみましょう。

⇨ 前回の記事(Laravel で 一番簡単なバリデーションをする)

環境

MacOS

Laravel6

前回までのコード

コントローラー

    public function store(Request $request)
    {
        //追記
        $validator = Validator::make($request->all(), [
            'name' => 'required',
            'title'  => 'required',
            'content' => 'required'
        ]);

        if ($validator->fails()) {
            return redirect()->back()
            ->withInput()
            ->withErrors($validator);
        }
        //追記ここまで

        $post = new Post;
        $post->name = $request->name;
        $post->title = $request->title;
        $post->content = $request->content;
        $post->save();
        return redirect()->route('post.create');
    }

前回このようなコードを書いていました。これをフォームリクエストに移していきます。

⇨ 公式ドキュメントの該当ページ

実装する

前回のコードをほぼコピペして実装することが可能です。

まず、コマンドでファイルを作成します。

php artisan make:request PostRequest

このコマンドで、App/Http/Requests/PostRequest が作成されました。

そのファイルを編集します。

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class PostRequest extends FormRequest
{
    public function authorize()
    {
        //ユーザー認証が必要な時はtrue
        return true;
    }

    public function rules()
    {
        return [
            'name' => 'required',
            'title'  => 'required',
            'content' => 'required'
        ];
    }
}

return の中を、前回の記事で作ったバリデーションルールをまるっとコピーして、authorize を必要に応じて変更するだけとなります。

Controller を修正します。

use App\Http\Requests\PostRequest;

~~~~~~~~

    public function store(PostRequest $request)
    {
        //追記
        //コメントアウトした部分が不要になった
        // $validator = Validator::make($request->all(), [
        //     'name' => 'required',
        //     'title'  => 'required',
        //     'content' => 'required'
        // ]);

        // バリデーション:エラー
        // if ($validator->fails()) {
        //     return redirect()->back()
        //     ->withErrors($validator)
        //     ->withInput();
        // }

以上です!前回と全く同じように、画像のように表示されました。

Laravelバリデーション画像2

前回の記事から続けてやっていれば、本当に簡単に実装することができます。

このように、バリデーションは FormRequest を使うというルールで開発をすれば、分かりやすいですし、Controller の中がスッキリするのでオススメです。

=>Laravel のバリデーションで errors が表示されないときの解決方法

まとめ

いかがだったでしょうか?

Laravel のバリデーション方法について書きました。

色々な記述方法があると思いますが、この記事のようにフォームリクエストを使った方法がもっともベストな方法ではないかと僕は思っていますが、みなさんはいかがでしょうか?

最後に初心者におすすめの本の紹介です。

記事の内容についての苦情やミスの指摘は、Twitter の DM にお願いします。