【初心者向け】Laravelで一番簡単なバリデーションをする方法
いつもご利用ありがとうございます。
この記事には広告が掲載されており、その広告費によって運営しています。
Laravel で一番簡単なバリデーションを実装していきます。
バリデーションは、例えば、「数字以外がきたら弾く」「必須項目が空だったら弾く」「文字数の上限が超えていたら弾く」といった、機能になります。
システムが予期しないデータを入力された時に、しっかり弾かないとエラーの原因になったりするので、しっかりと設定しなければなりません。
前回作った投稿機能にバリデーションをつけてみます。
環境
MacOS
Laravel6
前回投稿機能を作成したコード
コントローラー
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//追記
use App\Post;
class PostController extends Controller
{
public function store(Request $request)
{
$post = new Post;
$post->name = $request->name;
$post->title = $request->title;
$post->content = $request->content;
$post->save();
return redirect()->route('post.create');
}
}
このコントローラーで name と title と content の3つが保存できるようになっています。
バリデーションを実装する
この記事はコントローラーに書くという最も単純な方法について説明しています。最終的には、フォームリクエストにもチャレンジしてみてください。
今回つけるバリデーションは、全ての項目を「必須(required)」とするものです。
//追記
use Validator;
class PostController extends Controller
{
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');
}
}
一番これが簡単なバリデーション機能の付け方だと思います。
解説
ほぼ定型文で良いと思います。
機能によって変わる部分はここになります。
//追記
$validator = Validator::make($request->all(), [
'name' => 'required',
'title' => 'required',
'content' => 'required'
]);
カラムが必須じゃないところには、 nullable を指定したり、文字列のところには string を指定したりします。
この指定できる内容については、
Laravel 公式ドキュメント「使用可能なバリデーションルール」
に記載されています。
複数指定する
//追記
$validator = Validator::make($request->all(), [
'name' => 'required|string',
'title' => 'required|string',
'content' => 'required|string'
]);
このように|で区切ることで複数指定することができます。
表示側にどのカラムのバリデーションが引っかかったかを伝える
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
Blade にこれを記述してみてください。バリデーションに引っ掛かるとこのように表示されます。
$errors は、空の時は表示されないように middleware で設定されているので!empty()などで空判定する必要はないようになっています。
バリデーションメッセージを自由に設定する
required といった、バリデーションのルールや、name といったカラムの文字を自由に設定することができます。
これは、Laravel の公式ドキュメントでいうところの、他言語化のところの機能をつかいます。
まず、config/app.php を修正します。
'fallback_locale' => 'ja',
en を ja に変更してください。
次に resources/lang/ja/validation.php を作成します。
その中に、
<?php
return [
'required' => ':attributeは必須です',
'attributes' => [
'title' => 'タイトル'
]
]
を記述します。
required と、title だった箇所が今設定した「必須です」と「タイトル」に変更されました。
このように自由に変更することが可能です。
=>Laravel のバリデーションで errors が表示されないときの解決方法
まとめ
いかがだったでしょうか?
一番簡単な Laravel のバリデーション方法について書きました。
バリデーションはバックエンドを学んで実務に付きたい場合、非常に大事なところであると思います。
今回このような書き方をしましたが、更にワンランクアップさせた(ファットコントローラーを回避する書き方)にも挑戦してみましょう。
ほとんど今回の記述を生かした方法で実装が可能になります。
最後におすすめの本の紹介をして終わりにします!
記事の内容に関する苦情などは Twitter の DM でお願いします。