【初心者向け】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();
// }
以上です!前回と全く同じように、画像のように表示されました。
前回の記事から続けてやっていれば、本当に簡単に実装する ことができます。
このように、バリデーションは FormRequest を使うというルールで開発をすれば、分かりやすいですし、Controller の中がスッキリするのでオススメです。
=>Laravel のバリデーションで errors が表示されないときの解決方法
まとめ
いかがだったでしょうか?
Laravel のバリデーション方法について書きました。
色々な記述方法があると思いますが、この記事のようにフォームリクエストを使った方法がもっともベストな方法ではないかと僕は思っていますが、みなさんはいかがでしょうか?
最後に初心者におすすめの本の紹介です。
記事の内容についての苦情やミスの指摘は、Twitter の DM にお願いします。