2018/10/12
入力データのチェックを バリデーション といいます。
Laravel5.2でのバリデーションの記述の仕方について学習します。
従来型のバリデーション
バリデーションを使う箇所は主にFormで入力されたデータを保存・編集する storeメソッド やupdateメソッドになります。
従来型の記述ではコントローラに記述します。
コントローラに記述する流れとしては
1) バリデーションルールの設定
2) コントローラの validate() メソッドを実行
という流れで記述します。
public function store(Request $request) { $rules = [ 'title' => 'required|min:3', 'body' => 'required', 'published_at' => 'required|date', ]; $this->validate($request, $rules); User::create($request->all()); return redirect('users'); }
バリデーションルールの種類
よく使われやすいと思われるバリデーションのルールは以下になります。
バリデーションルール | 説明 |
---|---|
required | 入力必須 |
integer | 整数かどうか |
numeric | 数値かどうか |
string | 文字列であるかどうか |
array | 配列かどうか |
boolean | 論理値かどうか |
メールアドレスの形式であるかどうか | |
url | URLの形式であるかどうか |
エラーメッセージの日本語化
動作確認をしたらわかるのですが、エラーメッセージは全て英語です。
これを日本語にカスタマイズします。
作成の流れとしては
1) config/app.php の編集
2) resources/lang/ja/validation.php の作成
3) resources/lang/ja/validation.php の編集
となります。
1) config/app.php の編集
config/app.phpのlocale を 'en' から 'ja' に変更します。
: 'locale' => 'ja', :
これででエラーメッセージのファイルが ”resources/lang/en/validation.php" から "resources/lang/ja/validation.php" へと変わります。
2) resources/lang/ja/validation.php の作成
日本語のエラーメッセージファイルはララ帳の人が翻訳版を作ってくれています。
Laravel 5.1 日本語バリデーションメッセージファイル
ダウンロードしたvalidation.phpをresources/lang/ja/ 直下に配置します。
3) resources/lang/ja/validation.php の編集
実はこれだけだと完全に日本語のエラーメッセージにはなりません。
name属性がそのまま表示されるからです。
validation.phpの末尾にattributesを設定する場所があります。
そこでname属性を日本語に変換することができます。
: 'attributes' => [ 'name' => 'お名前', 'mail' => 'メールアドレス', 'gender' => '性別', 'age' => '年齢', 'pref' => '都道府県', 'birthday' => '生年月日', 'tel' => '電話番号', ], :
ReqestFormを使ったバリデーション
従来型のバリデーションではコントローラに記述しました。
Requestクラスを作ってそちらにバリデーションを実装することもできます。
ソースの記述としてはこちらのほうが綺麗ですよね。
作成の流れとしては
1) ArtisanコマンドでRequestクラスを生成
2) Requestクラスの編集
3) Controllerの編集
となります。
1) ArtisanコマンドでRequestクラスを生成
php artisan make:request UserRequest
app/Http/Requests/UserRequest.phpが作成されます。
2) Requestクラスの編集
rulesメソッドにバリデーションを設定していきます。
<?php namespace App\Http\Requests; use App\Http\Requests\Request; class GreetingRequest extends Request { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { # 認証の仕組みがない場合は何でも通すという意味でtrueを設定 return true; } /** * Get the validation rules that apply to the request. * * @return array */ # バリデーションはrulesメソッドに書く public function rules() { return [ 'name' => 'お名前', 'mail' => 'メールアドレス', 'gender' => '性別', 'age' => '年齢', 'pref' => '都道府県', 'birthday' => '生年月日', 'tel' => '電話番号', ]; } }
3) Controllerの編集
コントローラでUserRequestクラスを使うためには
1. コントローラでパスを通す
2. store/updateメソッドの引数に指定
の手順を踏みます。
これでバリデーションがかかるようになります。
1. Controllerの編集
Artisanコマンドで生成したUserRequestクラスをコントローラで使用できるようにします。
use App\Http\Requests\UserRequest;
2. メソッドの引数に指定
UserRequestクラスを引数に指定します。
public function store(UserRequest $request) { :
以上です。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。