【Laravel】独自のバリデーションルール実装

えびさん

標準のバリデーションルールに含まれない
オリジナルの規則を追加したい場合のメモ

手順
  1. app/Rulesにバリデーションルールファイルを作成
  2. FormRequestクラスで上記ファイルを使用する

例えば・・
バリデーションで、入力されたパスワードが最新のものか確認したい場合

app/Rulesにバリデーションファイル作成

  1. app/Rules以下にファイルを新規追加 (ファイル名は任意のものでOK)
  2. passesメソッドの中にルールを実装する
  • app/Rules/CurrentPassword.php
<?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use Illuminate\Support\Facades\Hash;

class CurrentPassword 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)
    {
        // パスワードが正しいかをチェックする
        return Hash::check($value, auth()->user()->password);
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return '現在のパスワードが正しくありません';
    }
}

Requestファイルで使う

  • UserAccountRequest.php
<?php

namespace App\Http\Requests;

use App\Rules\CurrentPassword; // ⭐️ 作成したファイルをuseする
use Illuminate\Foundation\Http\FormRequest;

class UpdateAccountRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            // ⭐️ 作成したCurrentPasswordクラスを使用する
            'current_password' => [ new CurrentPassword() ],
        ];
    }
}