Laravel8でバリデーションを実装する

今回はLaravel 8にてバリデーションを簡単に実装する方法を紹介したいと思います。

フォームリクエストを作る

Laravelでバリデーションを実装する1番簡単な方法は「フォームリクエストを作成する」ことです。フォームリクエストとはバリデーションのためのファイルと言っていいものです。今回は以下の想定で作りたいと思います

<postテーブルに以下の情報を追加したい>

  • title
    • 必須
    • 他の文字と被らない
    • 255文字以下
  • body
    • 必須
とびうお<br>
とびうお

今回は例は参考にする公式ドキュメント「readouble」に揃えています。

実際にフォームリクエストを作成する

まずコマンドでフォームリクエストファイルを作成しましょう。

php artisan make:request StorePostRequest

このようになコマンドを打つと、Requestファイルの配下に「StorePostRequest.php」が作成されます。

laravel8でバリデーションを実装する
Laravel8でバリデーションを実装する

中身を確認すると以下のようなファイルになっています。

laravel8でバリデーションを実装する
Laravel8でバリデーションを実装する

このファイルを以下のように書き換えます。

laravel8でバリデーションを実装する
Laravel8でバリデーションを実装する
<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class StorePostRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'title' => 'required|unique:posts|max:255',
            'body' => 'required',
        ];
    }
}

そして、使いたいコントローラー上でRequestの代わりにStorePostRequestを使います。

laravel8でバリデーションを実装する
laravel8でバリデーションを実装する
とびうお<br>
とびうお

必ず

use App\Http\Requests\StorePostRequest;

をしてあげましょう。

<?php

namespace App\Http\Controllers;

use App\Http\Requests\StorePostRequest;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function store(StorePostRequest $request)
    {
        //
    }
}

このように書くとフォームからtitleやbodyを空で送るとリダイレクトされて、フォームが再度表示されるようになります。

解説

ここからはrequestファイルについて解説していきたいと思います!

laravel8でバリデーションを実装する
Laravel8でバリデーションを実装する

authorize()

まず、authorizeの解説をします。

laravel8でバリデーションを実装する
Laravel8でバリデーションを実装する

ここの部分ですが、ここではauthorize、つまり認可をしています。

基本trueでいいですが、ここをfalseにすると401エラーを返します。デフォルトはfalseですので、ここをtrueに変えることを忘れないようにしましょう。

とびうお<br>
とびうお

例えばログインしている人だけというのを書きたい場合は

public function authorize()
    {
        retun Auth::check();
    }

のように書けばOKです!

rule()

続いてはrule()について解説します。

laravel8でバリデーションを実装する
laravel8でバリデーションを実装する

ここがrequestファイルで一番大事なところです。ここでreturnしているのがルールです。

return[
       'ここにname=""で指定した値"=>"ルール1|ルール2",
       'ここにname=""で指定した値"=>"ルール1|ルール2"
]

のような形で定義します。

とびうお<br>
とびうお

文字列で定義しているのに大丈夫なの?と思うかもしれませんがそこはLaravelがよしなにやってくれるのです。

今回は以下のようなルールを定義していますね。

ルールの定義の仕方ルールの意味
reqired必須
unique:〇〇:〇〇 の〇〇のテーブルに対して被りがあればfalse
max:〇〇:〇〇の〇〇より多い文字数(or数)であればfalse
バリデーションの定義とルール
とびうお<br>
とびうお

ruleは「:」の後に任意の何かを引数として扱います。

messageも追加できる

実はこれに加えて、message()という関数をrequestファイルに定義することで、エラー文をリダイレクト先のファイルで表示させることが可能です。

その内容は以下の記事にて説明しております。

まとめ

Laravelでバリデーションを定義する際はrequestファイルを作成してそれをcontrollerで使うようにしましょう!controllerの中でも定義できますが、こちらの方がcontrollerが短くなるのでよりきれいに作ることができます。

参考サイト

バリデーション 9.x Laravel
とびうお
ブログ管理人です!
swimaneというアプリをリリースしました!

コメント

タイトルとURLをコピーしました