validateメソッドとは
Laravelではフォームバリデーション機能が提供されており、validateメソッドはその内の一つです。
実体はIlluminate\Http\Requestクラスのメソッドです。
ちなみに、Illuminateはvender/laravel/framework/src/Illuminate
にあります。
validateメソッドによるバリデーションの実装方法
viewの作成
viewを作っていきます。
<form action="submit" method="post">
<div>
<label for="title">タイトル:</label>
<input type="text" id="title" name="title">
</div>
<div>
<label for="body">本文:</label>
<input type="text" id="body" name="body">
</div>
<div>
<input type="submit" value="送信">
</div>
@if ($errors->any())
<div>
<ul style="list-style: none;">
@foreach ($errors->all() as $error)
<li style="color: red; font-size: 14px;">{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
{{ csrf_field() }}
</form>
$errors
はLaravelの定義済み変数です。
バリデーションエラーが発生すると、自動的に$errors
にエラーメッセージが格納されます。
@foreach
で取り出して使いましょう。
ちなみに、@csrf
を書き忘れると、419エラーになってしまうのでちゃんと書きましょう。
参考:【Laravel5】たまに出てくる「the page has expired due to inactivity. please refresh and try again」を表示させない
https://qiita.com/sola-msr/items/8a0ea0abe510245760ac
遷移先ページは以下の感じです。
<p>submitted!!</p>
Controllerの作成
TestControllerを作成します。
php artisan make:controller TestController
メソッドを書いていきます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
public function index()
{
return view('test');
}
public function submit(Request $request)
{
// バリデーションルールの定義
$rules = [
// titleとbodyに入力必須
'title' => 'required|min:3|max:5',
'body' => 'required|min:1|max:10',
];
// バリデーション実行
$request->validate($rules);
return view('submit');
}
}
$rule
に連想配列でルールを定義し、$request->validate($rules)
でバリデーションを実行しています。
バリデーションルールは、Laravelで定義済みのルールを適用できます。
定義済みルールの一覧は、以下の記事が参考になるのでどうぞ。
参考:Laravelのバリデーションで指定できる内容をざっくりまとめ直しました。
https://qiita.com/fagai/items/9904409d3703ef6f79a2
バリデーションの実行は、$request->validate($rules);
の一行で完結です。
OKの場合は処理を続行、NGの場合はリダイレクトの処理を自動でやってくれます。
裏の処理をほとんど意識せずに実装できてしまいますね。
ルーティングの作成
TestControllerのルートを通します。
Route::get('/', 'TestController@index');
Route::post('submit', 'TestController@submit');