laravel5.1の入力チェック(validate)について調べてみた。わりと簡単だった!
基本的にはこれだけ!フレームワークの楽さを感じる!
色々と指定ルールがあるけど、必須(required)、文字数制限(max/min)、メール形式(email)、重複不可(unique)辺りがよく使いそう。
使用可能なバリデーションルール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// 新規作成でも更新でも同じ // public function store(Request $request) public function update(Request $request, $id) { // ルール(チェックする項目と内容)を指定 $rules = [ //'title' => 'required|min:3', //'published_at' => 'required|date', //パイプ区切りでもいいけど、配列形式の方が間違えなさそうだ。 'original_id' => ['required', 'unique:users'], 'username' => ['required', 'unique:users'], ]; // 問題があったら、元ページに戻る。問題なければ次へ進む $this->validate($request, $rules); |
入力チェックは新規作成・更新処理で基本的に同じはずなので、$rulesはprivate変数にして、共通化した方が楽かな?
でも試してみたら、更新でもunique制限がかかってしまうので、やっぱり別じゃないとダメだな~
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// クラスのプライベート変数化しておくと使いまわせるし修正も楽 private $rules = [ //'title' => 'required|min:3', //'published_at' => 'required|date', 'original_id' => ['required', 'unique:users'], 'username' => ['required', 'unique:users'], ]; // public function store(Request $request) public function store(Request $request) { // Checkだけ! $this->validate($request, $this->rules); |
後は、blade.phpで、中身を表示する前にエラー内容を表示してあげるだけ!
http://readouble.com/laravel/5/1/ja/validation.html#quick-displaying-the-validation-errors
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{{-- 新規作成や更新時のValidateエラーメッセージ --}} @if (count($errors) > 0) <div class="alert alert-danger"> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif @yield('content') |
https://gist.github.com/syokunin/b37725686b5baf09255b
問題は、上記の日本語メッセージを導入しても、カラム名がそのまま表示されてしまう。
emailは必須です。
usernameは既に存在します。
ちょっと調べてみたら、日本語メッセージの最後にあるattributesに変換ルールを記述すれば良いみたい
1 2 3 4 5 |
'attributes' => [ 'original_id' => 'オリジナルID', 'email' => 'メールアドレス' ], |
以下のようにバリデーション・エラーが表示されるようになったので満足!
アドレスは必須です。
オリジナルIDは既に存在します。