在消息中包含用于自定义验证规则的参数

用户名

我创建了一个自定义验证规则:

<?php

namespace App\Rules;

use Carbon\Carbon;
use Illuminate\Contracts\Validation\Rule;

class NotOlderThan
{
    public function validate($attribute, $value, $parameters, $validator)
    {
        $maxAge = $parameters[0];
        $date = Carbon::parse($value);

        return !Carbon::now()->subYears($maxAge)->gte($date);
    }
}

我已经在ServiceProvider中添加了它:

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Validator;

class RulesServiceProvider extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('phone', 'App\\Rules\\Phone');
        Validator::extend('not_older_than', 'App\\Rules\\NotOlderThan');
    }
}

我已修改resources/lan/en/validation.php为包括以下内容:

/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute.rule" to name the lines. This makes it quick to
| specify a specific custom language line for a given attribute rule.
|
*/

'phone' => 'The :attribute must be a valid :locale number without the country code prefix.',
'not_older_than' => 'Age cannot be older than :maxAge',

现在,我可以使用以下自定义验证规则:

$this->validate([
    'phone' => 'required|phone',
    'dateOfBirth' => 'not_older_than:30',
    'issuedAt' => 'not_older_than:10'
]);

现在,我遇到的问题是我希望能够将参数包含在返回给客户端的验证消息中,但是我不确定该在哪里设置。例如。'not_older_than' => 'Age cannot be older than :maxAge'应该Age cannot be older than 30 years.在上面的示例中返回

用户名

因此,对文档进行第二次查看时,我看到了我一定是第一次错过的以下内容:

/**
 * Bootstrap any application services.
 *
 * @return void
 */
public function boot()
{
    Validator::extend(...);

    Validator::replacer('foo', function ($message, $attribute, $rule, $parameters) {
        return str_replace(...);
    });
}

但是,这对我不起作用,由于某种原因,每当我添加此代码时,自定义验证器就会停止工作,没有错误,那就是行不通的。所以我环顾四周,在这里找到了一个解决方案,建议我以这种方式尝试:

<?php

namespace App\Rules;

use Carbon\Carbon;
use Illuminate\Contracts\Validation\Rule;

class NotOlderThan
{
    public function validate($attribute, $value, $parameters, $validator)
    {
        $validator->addReplacer('not_older_than',  function ($message, $attribute, $rule, $parameters) {
            return str_replace(':age', $parameters[0], $message);
        });

        $maxAge = $parameters[0];
        $date = Carbon::parse($value);

        return Carbon::now()->subYears($maxAge)->lte($date);
    }
}

在这里,我在自定义规则类的validate方法中调用了验证器实例,并在其上使用了替换器。这对我有用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Laravel中图像大小规则的自定义验证消息

在 Laravel 中翻译自定义验证规则消息?

Laravel:自定义规则的验证消息

将withMessageKey用于Aurelia中的自定义验证消息

Laravel 5中用于自定义验证规则的自定义占位符

在Laravel中验证数组时,如何使用数组项规则添加验证自定义消息?

规则的jQuery验证程序自定义错误消息位置

动态更改CakePHP 3自定义验证规则消息

Laravel验证规则的自定义错误消息:尺寸

验证失败时包含参数名称的自定义错误消息

Laravel中的自定义验证消息

如何在Laravel中覆盖自定义验证规则的消息?

Laravel中的正则表达式规则的自定义验证消息?

检查 Laravel 自定义验证规则中是否存在路由参数?

如何在自定义验证规则laravel中访问route参数

用于验证消息的自定义HTML帮助器

春自定义验证 - 通过参数插值消息

jQuery验证数据属性中的自定义规则

Laravel 5注册商中的自定义验证规则

在Laravel中自定义模型存储的验证规则

Laravel验证消息包含“验证”。而不是自定义错误消息

Docusign 访问码验证 - Docusign 中的自定义消息

vee-validate中的自定义验证消息

在Hibernate + Spring中无法解析自定义验证消息

laravel中`requiredIf`验证的自定义错误消息

CakePHP 3.0中忽略了自定义验证消息

在 Bot 框架 C# 中自定义验证消息

Mahapps中的自定义弹出窗口验证消息

laravel 8 中的自定义验证消息