Laravel 扩展验证自定义消息

2022-08-30 22:49:59

我想创建此扩展验证。

Validator::extend('my_custom_validation_rule', function ($attribute, $value, $parameters) {
   // I guess I should be setting the error message for this here.(Its dynamic)
   // We can return true or false here depending upon our need.  
}

我会像这样使用这个规则

'my_field' => 'required|my_custom_validation_rule',

我想用一些动态消息来应对”my_custom_validation_rule"

我无法从文档中找到有关它的内容。有没有办法做到这一点?


答案 1

该方法允许将消息作为第三个参数传递:extend

Validator::extend('my_custom_validation_rule', function ($attribute, $value, $parameters) {
    // ...
}, 'my custom validation rule message');

默认情况下,您只能使用动态变量,即 .如果要添加更多使用::attributeValidator::replacer()

Validator::replacer('my_custom_validation_rule', function($message, $attribute, $rule, $parameters){
    return str_replace(':foo', $parameters[0], $message);
});

答案 2

这基本上与@lukasgeiter答案的方式相同,但是如果您需要在扩展函数内部管理动态变量,则可以直接在扩展内部使用。$validator->addReplacer

Validator::extend('my_custom_validation_rule', function ($attribute, $value, $parameters, $validator) {

    // Test custom message
    $customMessage = request()->get('foo') 
        ? "Foo doesn't exist"
        : "Foo exist";

    // Replace dynamic variable :custom_message with $customMessage
    $validator->addReplacer('my_custom_validation_rule', 
        function($message, $attribute, $rule, $parameters) use ($customMessage) {
            return \str_replace(':custom_message', $customMessage, $message);
        }
    );

    // Test error message. (Make it always fail the validator)
    return false;

}, 'My custom validation rule message. :custom_message');

推荐