入力した内容にバリデーションをかける

2018/10/12

validation02

前回は入力した内容を表示させる簡単なフォームを作成しました。

入力した内容を表示する簡単なフォームを作成

作成したフォームでは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 の開発は英語で行われているので、当然デフォルトのバリデーションエラーメッセージは英語です。

validation01

これを日本語にカスタマイズする必要があります。

上記の図のようなエラーメッセージは 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' => 'お名前',
  ],

これで全部、エラーメッセージが日本語で表示されます。

validation02

 

チュートリアル

実現したいこと

前回は入力した内容を表示する簡単なフォームを作成しました。

入力した内容を表示する簡単なフォームを作成

今回はこのフォームにバリデーションをかけます。

  1. 前回作成したフォームにバリデーションをかける
  2. エラーメッセージを日本語にする

 

手順

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

にアクセスします。

何も入力しないで送信ボタンを押します。

validation02

上のような画面が表示されればOKです。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-基礎知識