Help us understand the problem. What is going on with this article?

laravelでバリデーションを使ってみた

まず最初に

まず最初に。
初心者なので違ったことを書いている場合があるかもしれませんので、
その時はご指摘いただければと思います。

現在、laravelでCRUDを勉強中。

今回はバリデーションを使ってみたんですが、少し戸惑うこともありましたが取りあえず完成しました。
今回はlaravel公式サイトの日本語訳サイトのバリデーションのドキュメントを参考にしました。

Laravel 6.x バリデーション

MIT lisence
/**
Copyright (c) 2019 Taylor Otwell(Original) and Hirohisa kawase(Translation)
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
*/

バリデーションエラーを表示

バリデーションエラーを表示できるようにviewファイルに以下のコードを追加しました。

create.blade.php
@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

スクリーンショット 2020-02-08 11.12.45.png
表示のイメージは上記のような感じとなります。
ちなみにのエラーメッセージは後ほどカスタイズできるので便宜上”error message”としています。

バリデータの生成

バリデータの生成を使うにはまずバリデータを使うコントローラーにValidatorファサードを使えるように次のコードを追加する必要があります。
こういうコードって忘れがちなんで気をつけていただければと思います。

UserController.php
<?php
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator; //この行を追加

次にUseControllerクラスのstore関数に次のコードを追加します。

UserController.php
class UserController extends Controller
{
    public function store(Request $request)
    {
        $validator = Validator::make($request->all(), [
            'title' => 'unique:users',
        ]);
        if ($validator->fails()) {
            return redirect('users/create')
                        ->withErrors($validator)
                        ->withInput();
        }
    }
}

まずmakeメソッドの第1引数の$request->all()はバリデーションを行うデータでリクエストの全てを取得しています。
第2引数はそのデータに適用するバリデーションのルールです。titleに適用するルールは'unique:users'となっていて
unique:usersはusersテーブルに使われているtitleは重複不可と言う意味です。
次にバリデーションでエラーが生じた場合のコードがif文から書いてありますが、私もよくわからないのでこういうものだということにしておきます。

先程のコードで出てきたバリデータは3つに引数があります。

$validator = Validator::make($input, $rules, $messages);

第1引数と第2引数は上記で説明した通りで、最後の第3引数はエラーメッセージのカスタムメッセージを渡します。
最初に出てきたエラーメッセージ”error message”を日本語にしてみたいと思います。

以下のようなコードでカスタムエラーメッセージを指定することができます。

$messages = [
    'title.unique' => 'titleが重複しています。',
];

バリデータのまとめ

以上のバリデータのコードを利用してバリデータをまとめたい思います。

$input = $request->all(); //第1引数:バリデーションを行うデータ

$rules = ['title' => 'unique:users']; //第2引数:そのデータの適用するルール

$messages = ['title.unique' => 'titleが重複しています。']; //第3引数:カスタムエラーメッセージを指定する

$validator = Validator::make($input, $rules, $messages);

わかりやすくするためにルールを1つにしたことでコードをすっきりすることができたと思います。
上記のように3つの引数を完全に分けて考えたほうが、複雑になってもメンテナンスしやすいんじゃないでしょうか?
私も見直すために投稿しているのでわかりやすくしたつもりなので、皆様の参考になればと思います。

License

MIT

salt-margin-trader
プログラミング超初心者です。株式投資の銘柄や取引などをエクセルで管理していたけど、データが多くなり重くなったのでデータベースを使ったウェブアプリを作ろうと決心。でも、なかなかはかどらないけど、ぼちぼちプログラムを作っていきます。
https://toushi-muzu.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away