バリデーションについて

2018/10/12

mainvisual

入力データのチェックを バリデーション といいます。

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 論理値かどうか
email メールアドレスの形式であるかどうか
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が作成されます。

img01

 

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 を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-基礎知識