Laravel#8 バリデーションチェックの実装と日本語化
目次
使用環境
Laravel Framework 7.28.3
バリデーションとは
バリデーションとは入力フォームにおいて妥当性を検証する機能です。
例えば問い合わせフォームを作成する際には、以下の要件が考えられます。
・名前欄や問い合わせ内容を必須項目にしたい。
・連絡先電話番号に正しい値を入れて欲しい。
制作側が意図した値が入らないようにするためにはバリデーションチェックを設ける必要があります。
バリデーションを作成する方法は2つ
バリデーションで入力フォームを制御する方法は、以下の2パターンがあります。
①入力フォームのControllerでValidation関数を使う
②FormReqestというバリデーション専用の独立したファイルを作成
①の方法を試したわけではありませんが、
個人的にはControllerの記述量が減るので②の方が煩わしさは減ると考えています。
なので今回は②のFormRequestを使った方法を記載したいと思います。
バリデーションの設定方法
FormReqestファイルを作成
以下コマンドを実行するとapp\http\reqestsに任意の名前のファイルが作成されます。
php artisan make:request CreatePostRequest
app\Http\Requests\CreatePostRequest.phpを開くとデフォルトで以下のように記述されてます。
FormRequestクラスが継承されているのが分かりますね。
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; class CreatePostRequest extends FormRequest { /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { //デフォルトでfalseになっているがtrueに変更 return true; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [[ //フォームの入力ルールを記載 ]; } }
フォームデータ受け取りControllerの編集
まず先ほど作成したFormRequestが継承されるように、参照の記述を変更しましょう。
//変更前 use Illuminate\Http\Request; //変更後 use App\Http\Requests\CreatePostRequest;
またフォームの送信内容を受け取るクラスについても、FormRequestが継承されるように変更します。
public function store(CreatePostRequest $request) { … }
Bladeテンプレートにエラーメッセージ挿入
フォーム送信時にバリデーションチェックに引っ掛かった場合は、送信前のページにリダイレクトされます。
その際Bladeテンプレートに以下を記述しておくことで、エラー文を表示することが可能となります。
@if (count($errors) > 0) <div class="errormessage"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
バリデーションの追加設定
attributesのカスタム設定
attributesを日本語に訳すと”属性”になりますが、ここでは項目名という認識で大丈夫です。
validationメッセージを日本語化しただけでは、まだ項目名だけ英語で表示されます。
そこでattributesのカスタム設定を行うことで項目名の日本語化が可能になります。
\app\Http\Requests\CreatePostRequest.phpで以下のように入力項目の制限を施していたとします。
※セキュリティの観点から実際のパスワードはもっと長くなければなりませんが
public function rules()
{
return [
'Password' => 'required|integer|digits:4',
];
}
※required=必須項目、integer=整数でなければならない、digits:4=数字4桁でなければならない。
次にresources\lang\ja\validation.phpを開き'attributes'でカスタムバリデーションを設定します。
'attributes' => [ 'Password' => 'パスワード', ],
これで例えば「Passwordは4桁で指定してください」が「パスワードは4桁で指定してください」となります。
エラーメッセージの変更
Laravelのエラーメッセージはデフォルトで英語しか用意されておりません。
※バリデーションの言語ファイルは\resources\langに格納されており、デフォルトで存在するのはenフォルダのみです。
ただし日本語化自体はgithubに上がっているコードで簡単に実現します。
Laravel 5.1 日本語バリデーションメッセージファイル · GitHub
↑上記リンクはLaravel5.1と書かれていますが7.xでも問題なく使用可能です。
手順としては
①\resources\lang\jaフォルダに(なければ作成)validation.phpファイルを作成。
②上記githubのリンクで入手したコードをコピペ
③config/app.phpを以下のように編集
(localeの値をen→jaに変更)
/*
|--------------------------------------------------------------------------
| Application Locale Configuration
|--------------------------------------------------------------------------
|
| The application locale determines the default locale that will be used
| by the translation service provider. You are free to set this value
| to any of the locales which will be supported by the application.
|
*/
'locale' => 'ja',
以上になります。お疲れ様でした!