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?

More than 1 year has passed since last update.

Laravel Rules カスタムバリデーションルールを作成

Last updated at Posted at 2021-11-01

はじめに

複雑な条件や独特なバリデーションを作成したい時に便利なルールオブジェクトです。
あまり余計なものを書かずにシンプルに説明しています。

目次

  1. Rulesファイルの作成
  2. Requestファイルにツールオブジェクトを設置
  3. ルールの作成

Rulesファイルの作成

下記コマンドでRulesファイルを作成する。
app/Rulesフォルダ下にファイルが作成される。
※命名規則は多分アッパーキャメル

$ php artisan make:rule ファイル名

$ php artisan make:rule CheckWords

Requestファイルにツールオブジェクトを設置

先程作成したCheckWordsをRequest.phpファイルのルールにセットする。

// Requestファイルでuse宣言
use App\Rules\CheckWords;


public function rules(Request $request)
    {
        return [
                  // new CheckWordsをバリデーションルールに追加
                  'content' => ['required', 'string', new CheckWords],
               ]
    }

ルールの作成

ここでpasses( ) にオリジナルのバリデーションを記述。
passesの中に記述した処理がtrueの場合は、バリデーションを問題なく通過。
falseの場合は下記のmessage( )メソッドの内容でバリデーションエラーメッセージが表示される。
message( ) にバリデーションのエラーメッセージを記述する。

<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CheckWords implements Rule
{
    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        // $attributeにはフィールド名(content)、$valueにはリクエストで送信した
                       contentフィールドのデータが入っている。
        // $valueに'#'が含まれていればtrue。含まれていなければfalseとなり、
                       下記message()内の処理を行う。

        return strpos($value, '#');
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        // 通常のバリデーションエラーメッセージと同じように下記のエラーが表示される。 
        return '投稿にハッシュタグがありません。必ず一つ付けてください。';
    }
}
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?