2018/10/12
前回は入力した内容を表示させる簡単なフォームを作成しました。
作成したフォームではHTML5のinput要素のrequired属性を使いました。
今回はLaravelで用意されているバリデーションを利用します。
バリデーションのかけ方
フォームで入力された内容はGreetingControllerのpostIndexメソッドに渡されます。
バリデーションはpostIndexメソッドに記述します。
アプリケーションの基本コントローラークラスではvalidateメソッドが提供されています。
このvalidateメソッドを利用することでバリデーションをかけることができます。
書式は
validate( 'HTTPリクエスト' , 'バリデーションルール');
になります。
バリデーションのルールは
inputタグのname属性で付けたデータ名 => バリデーションルール
という連想配列の形式で指定します。
バリデーションルールの種類は主に以下のものがあります。
・required
入力値が存在するかどうか
・integer
整数かどうか
・string
文字列であるかどうか
・email
メールアドレスの形式であるかどうか
その他のバリデーションルールの詳細はこちら
前回作成したコントローラに記述するならこんな感じになります。
public function postIndex(Request $request) { $this->validate($request, [ 'onamae' => 'required', ]); : ※問題なければこのまま以下の内容を処理を実行します。 }
もしバリデーションにひっかかると、自動的に前の画面にリダイレクトしてくれます。
問題なければ、そのまま次の処理を実行していきます。
エラーメッセージの日本語化
Laravel の開発は英語で行われているので、当然デフォルトのバリデーションエラーメッセージは英語です。
これを日本語にカスタマイズする必要があります。
上記の図のようなエラーメッセージは resources/lang/en/validation.php に書かれています。
日本語のエラーメッセージファイルは resources/lang/ja/validation.php を作って書いていきます。
日本語のエラーメッセージファイルはララ帳の人が翻訳版を作ってくれているので、それを使うと便利です。
Laravel 5.1 日本語エラーメッセージファイル | ララ帳
上記のvalidation.phpをresources/lang/ja/ 直下に配置したら
config/app.phpのlocale を 'ja' に変更します。
こうすると、 resources/lang/ja/validation.php を優先的に読みにいってくれます。
ただ、このまま使用するとエラーメッセージは
" onamaeは必須です "
というメッセージになります。
onamaeはinputタグのname属性で付けたデータ名でしたね。
これもカスタマイズする必要があります。
resource/lang/ja/validation.phpのファイルの最下部にattributesを連想配列でカスタマイズすることができます。
'attributes' => [ 'onamae' => 'お名前', ],
これで全部、エラーメッセージが日本語で表示されます。
チュートリアル
実現したいこと
前回は入力した内容を表示する簡単なフォームを作成しました。
入力した内容を表示する簡単なフォームを作成
今回はこのフォームにバリデーションをかけます。
- 前回作成したフォームにバリデーションをかける
- エラーメッセージを日本語にする
手順
1. Controllerにvalidateメソッドを追加
/Http/Controllers/GreetingController.phpのpostIndexメソッドにvalidateメソッドを追加します。
#greeting/indexにPOST送信された時の処理 public function postIndex(Request $request) { $this->validate($request, [ 'onamae' => 'required', ]); $res = "こんにちは!" . $request->input('onamae')."さん!!"; return view('greeting', ['message' => $res]); }
2. 日本語のエラーメッセージファイルの設置
Laravel 5.1 日本語エラーメッセージファイル | ララ帳
から日本語化されたエラーメッセージファイル(validation.php)をダウンロードして
resource/lang/ja/
に設置します。
それを反映させるために config/app.phpのlocale を 'ja' に変更します。
'locale' => 'ja',
これでエラーメッセージの日本語化ができました。
ただ、このままだとname属性の変数名をそのまま表示させます。
次の作業で変数名も日本語に変更します。
3. attributeの設定
resource/lang/ja/validation.phpの最下部に
'attributes' => [ 'onamae' => 'お名前', ],
と連想配列で記述します。
4. ブラウザにアクセスして動作確認
空で入力できるようにVeiwファイルのinputタグのrequired属性を外します。
{{-- resources/views/greeting.blade.php --}} <input type="text" name="onamae" class="form-control" placeholder="名前を文字を入力してください" autofocus>
http://localhost/mylaravel/public/greeting
にアクセスします。
何も入力しないで送信ボタンを押します。
上のような画面が表示されればOKです。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。