今回はLaravel 8にてバリデーションを簡単に実装する方法を紹介したいと思います。
フォームリクエストを作る
Laravelでバリデーションを実装する1番簡単な方法は「フォームリクエストを作成する」ことです。フォームリクエストとはバリデーションのためのファイルと言っていいものです。今回は以下の想定で作りたいと思います
<postテーブルに以下の情報を追加したい>
- title
- 必須
- 他の文字と被らない
- 255文字以下
- body
- 必須
今回は例は参考にする公式ドキュメント「readouble」に揃えています。
実際にフォームリクエストを作成する
まずコマンドでフォームリクエストファイルを作成しましょう。
php artisan make:request StorePostRequest
このようになコマンドを打つと、Requestファイルの配下に「StorePostRequest.php」が作成されます。
中身を確認すると以下のようなファイルになっています。
このファイルを以下のように書き換えます。
<?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を使います。
必ず
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ファイルについて解説していきたいと思います!
authorize()
まず、authorizeの解説をします。
ここの部分ですが、ここではauthorize、つまり認可をしています。
基本trueでいいですが、ここをfalseにすると401エラーを返します。デフォルトはfalseですので、ここをtrueに変えることを忘れないようにしましょう。
例えばログインしている人だけというのを書きたい場合は
public function authorize()
{
retun Auth::check();
}
のように書けばOKです!
rule()
続いてはrule()について解説します。
ここがrequestファイルで一番大事なところです。ここでreturnしているのがルールです。
return[
'ここにname=""で指定した値"=>"ルール1|ルール2",
'ここにname=""で指定した値"=>"ルール1|ルール2"
]
のような形で定義します。
文字列で定義しているのに大丈夫なの?と思うかもしれませんがそこはLaravelがよしなにやってくれるのです。
今回は以下のようなルールを定義していますね。
ルールの定義の仕方 | ルールの意味 |
reqired | 必須 |
unique:〇〇 | :〇〇 の〇〇のテーブルに対して被りがあればfalse |
max:〇〇 | :〇〇の〇〇より多い文字数(or数)であればfalse |
ruleは「:」の後に任意の何かを引数として扱います。
messageも追加できる
実はこれに加えて、message()という関数をrequestファイルに定義することで、エラー文をリダイレクト先のファイルで表示させることが可能です。
その内容は以下の記事にて説明しております。
まとめ
Laravelでバリデーションを定義する際はrequestファイルを作成してそれをcontrollerで使うようにしましょう!controllerの中でも定義できますが、こちらの方がcontrollerが短くなるのでよりきれいに作ることができます。
コメント