0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【BLOCS】オリジナルのバリデーションルールを作る

Last updated at Posted at 2023-01-15

バリデーションルール

Laravelは requiredmax など色々なバリデーションを、デフォルトでかけることができます。しかし、案件によってはオリジナルなバリデーションルールを追加したい場合もあります。Laravelでオリジナルのルールを作成して、BLOCSで利用する方法を紹介します。

この記事では、Laravel11の実装方法を紹介します。Laravel10以前では、Laravelのオリジナルルール作成方法が異なりますのでご注意ください。

Laravelでオリジナルのルールを作る

artisanでオリジナルのルールを作ります。

php artisan make:rule Myrule

作成したルールを編集して、オリジナルのルールを作ります。今回は倍数の検証をするオリジナルのルールを作ります。

汎用性を持たせるために、コンストラクタで倍数を検証する数字を設定できるようしました。BLOCSテンプレートのdata-lang で指定したメッセージが、$messageに自動でセットされます。

app\Rules\Myrule.php
    private $num;
    private $message;
    
    public function __construct(string $num, string $message)
    {
        $this->num = intval($num);
        $this->message = $message;
    }

次に、検証を通過する条件を設定します。$valueに入力値がセットされますので、条件を決めます。オリジナルルールの作成は以上です。

app\Rules\Myrule.php
    public function validate(string $attribute, mixed $value, Closure $fail): void
    {
        if (intval($value) % $this->num === 0) {
            return;
        }

        $fail($this->message);
    }

BLOCSのテンプレートで設定する

テンプレートでルールを指定します。デフォルトのバリデーションルールと併用することもできます。data-lang で、エラーメッセージを設定します。

create.blocs.html
<input type="number" name="multiple" data-validate="bail|required|integer" />
<!--
    !multiple="Myrule:5"
    data-lang="5の倍数を入力してください。"
-->

@error("multiple") <div class="invalid-feedback">{{ $message }}</div> @enderror

コントローラーでバリデーション実行

コントローラーが、ベースコントローラーを継承している時は不要です。

テンプレートで指定するだけでは、入力フォームへのバリデーションはかかりません。指定したバリデーションとメッセージを、フォームリクエストやvalidateメソッドに渡してバリデーションを実行します。今回は、フォームリクエストでバリデーションを実行しました。

app\Http\Requests\BookRequest.php
    public function rules()
    {
        return \Blocs\Validate::rules('books.create');
    }

    public function messages()
    {
        return \Blocs\Validate::messages('books.create');
    }

バリデーションの動作確認です。5の倍数以外を入力すると、エラーメッセージが表示されます。

スクリーンショット 2023-01-14 16.50.34.png

おわりに

今回は、オリジナルのバリデーションルールを作りました。プログラマーの労力を減らせる工夫を色々と取り入れてBLOCSを開発しています。PHP初学者や、プログラムに苦手意識のある方に特にオススメです。最後まで読んでいただき、ありがとうございました!

関連サイト

  1. サービスサイト
  2. GitHub
  3. Packagist
0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?