9
6

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 5 years have passed since last update.

Laravel 独自バリデーションのメッセージに指定したパラメータを載せたいんじゃー

Last updated at Posted at 2018-11-05

ほい。

Laravelで独自バリデーションの実装は調べると結構出るが、独自バリデーションのパラメータをメッセージに埋め込む方法がいまいちわからなかったので備忘録のアレ

まずアレでバリデーションのサービスプロバイダーを作る。名前とかは何でもおk

php artisan make:provider ValidatorServiceProvider

validate* としたら独自バリデーションを定義できるのは調べたらすぐ出る
replace* としたら独自バリデーションのメッセージの置換を実装できる ← これのやり方を調べてもいまいちでなかった

app/Validator 配下に CustomValidationクラスを作成


<?php

namespace App\Validator;

class CustomValidation extends \Illuminate\Validation\Validator
{
    // 数値化指定した指定した日付フォーマットのみ許可 
    public function validateIntegerOrDateFormat($attribute, $value, $parameters)
    {
        if (is_numeric($value)) {
            return true;
        }

        if (false !== \DateTime::createFromFormat($parameters[0], $value)) {
            return true;
        }

        return false;
    }

    // メッセージの:formatという文言を置換してリターン
    protected function replaceIntegerOrDateFormat($message, $attribute, $rule, $parameters)
    {
        return str_replace(':format', $parameters[0], $message);
    }
}

ほんでプロバイダに登録

<?php

namespace App\Providers;

use App\Validator\CustomValidation;
use Illuminate\Support\ServiceProvider;

class ValidatorServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        \Validator::resolver(function ($translator, $data, $rules, $messages) { // (1)
            return new CustomValidation($translator, $data, $rules, $messages);
        });
    }

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

メッセージ定義

src/resources/lang/ja/validation.php

return [
    // 前略
    'integer_or_date_format' => 'フォーマットが不正です。数値、または":format"の形式で入力してください',
];

指定方法

$validator = Validator::make($params, [
    'input_hoge' => 'integer_or_date_format:Y-m-d'
]);

これで
フォーマットが不正です。数値、または":format"の形式で入力してください
これが
フォーマットが不正です。数値、または"Y-m-d"の形式で入力してください
になる

やったぜ。

9
6
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
9
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?