【Laravel】Validateメソッドの使い方!エラーメッセージの日本語化

この記事からわかること
- Laravelのバリデーションとは?
- フォーム要素の入力値をチェックする方法
- コントローラで使えるvalidateメソッドの使い方
- エラー配列の操作方法とメッセージの変更方法
- エラーメッセージのカスタマイズと日本語化
index
[open]
\ アプリをリリースしました /
Web制作には欠かせない「バリデーション」機能がLaravelでは簡単に実装できるようになっていました。
実際にLaravelでバリデーションを行う方法や使い方、エラー処理からのエラーメッセージの出し方をまとめていきたいと思います。
参照記事:公式リファレンス-バリデーション-
バリデーションとは?
そもそもバリデーション(Validation)とは「検証」と言う意味の英単語でプログラミングでは入力値が正しいものであるかチェックすることを指します。
ユーザーが入力フォームから送信した値をデータベースへの格納やロジックのトリガーにする場合に値をそのまま使ってしまうと望まない値を送信された時にエラーや予期せぬ挙動を引き起こす原因になってしまいます。
そこでユーザーからの入力値がルールを元に正しい形式や値の範囲内に収まっているのかなどを検証し外れていればエラーを発生させユーザーに再入力を促すのがバリデーションの目的となります。
ポイント
- バリデーションとは検証のこと
- ユーザーからの入力値はそのまま使わない
- エラーメッセージを出すと親切
Laravelのvalidateメソッド
Laravelでは入力値のバリデーションをvalidate
メソッドを使って簡単に実装することができます。
バリデーション処理を記述するのはコントローラ部分です。bladeテンプレートにフォームを設置しルーティング設定をしたらコントローラのアクションメソッドに処理を記述していきます。
index.blade.php(フォーム部分)
web.php(ルーティング)
validateController.php
validateメソッドはリクエストオブジェクトに定義されており、コントローラファイル内で$request->validate()
の形式で呼び出し使用できます。
requestオブジェクトはHTTPリクエスト情報(POSTされた入力値やURL、リクエストヘッダ情報など)を保持しているオブジェクトで使用するにはuse文で読み込みが必要になります。
引数にはinput要素で指定しているname属性
とその項目に検証させたいルールを連想配列形式で渡します。
おすすめ記事:【まとめ】Laravel-バリデーションルール一覧
バリデーションルール違反のエラー処理
入力された値がルールに違反していた場合validate
メソッドはIlluminate\Validation\ValidationException
に属するエラーレスポンスを返し直前のURL(入力フォーム)へ自動でリダイレクトしてくれます。
その際にエラー内容は$errors
配列の中にまとめて格納され、どこからでも入力値やエラーメッセージにアクセスできるようになります。例えばエラーメッセージを表示させる場合は以下の通りです。
$errors変数で使えるメソッドの種類と使い方
$errors
には様々なメソッドが用意されています。
hasメソッド
has
メソッドは指定したname属性のエラーが存在していればtrue
を返すメソッドです。@if
と組み合わせることで存在している場合のみメッセージを取得して表示させることができます。
firstメソッド
first
メソッドは指定したname属性のエラーメッセージを取得するメソッドです。
エラーメッセージは設定したバリデーションルールの数だけ格納されますのでfirst
メソッドを使った場合1番目のメッセージしか取得できません。
getメソッド
項目に格納されている複数のエラーメッセージを取得したい場合はget
メソッドを使用します。get
メソッドの場合は返り値が配列になりその中にメッセージが保存されるので@foreach
を使って中身を取得します。
allメソッド
各項目の全てのエラーメッセージを取得したい場合はall
メソッドを使用します。all
メソッドの場合も返り値が配列になりその中にメッセージが保存されるので@foreach
を使って中身を取得します。has
メソッドを使えないので配列の個数をカウントして表示を切り替えます。
@errorディレクティブ
エラーメッセージを表示させるのにhas
メソッドで有無を識別していましたがblade構文でも識別可能な@errorディレクティブが用意されています。
使い方はhas
メソッドと同じで引数に指定したname
属性のエラーが存在する場合のみ中に記述した処理を実行してくれます。
また@errorディレクティブ
を使用する場合はfirst
メソッドなどの取得するメソッドを使用しなくても自動で変数$message
(固定)に格納してくれます。
バリデーションエラーメッセージの変更方法
バリデーションのエラーメッセージはデフォルトでは英語になっています。
このメッセージは「resources」>「lang」>「en」>「validation.php」で定義されているのでここを変更すればカスタマイズすることができます。
validation.php
ここに全てのルールに対するエラーメッセージが以下の形式で定義されているので自由にカスタマイズすれば表示させるメッセージを変更できます。
メッセージに出てくる:attribute
部分が項目名(name属性)に自動で置き換わっている部分です
バリデーションエラーメッセージの日本語化
少数であれば手動で変更する方が早いですが全て日本語化させたい場合はLaravelのロケール(locale)自体を「ja(日本)」に変更することでエラーメッセージも一括で日本語化することができます。
日本語化といっても行うのは「resources」>「lang」内に「ja」ファイルをインストールし設定を変更するだけです。
詳細は以下の記事にまとめてありますのでここでは流れとコマンドだけまとめておきます。
以下のコマンドをターミナル(コマンドライン)で順番に実行すれば「ja」ファイルのインストールが完了します。
日本語化するコマンド
インストールされていることが確認できたらLaravelプロジェクトのローケル設定をしている「config」>「app.php」内を以下のように変更して終了です。
app.php
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。