Пользовательское сообщение расширенной проверки Laravel

Я хотел создать эту расширенную проверку.

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"

Я не смог найти что-то из документации об этом. Есть ли способ сделать это?


person Ajeesh Joshy    schedule 04.05.2015    source источник
comment
Посмотрите еще раз: laravel.com/docs/5.0/validation#custom-error-messages   -  person lukasgeiter    schedule 04.05.2015
comment
Я хочу предоставить сообщение в Validator::extend('my_custom_validation_rule', само закрытие, возможно ли это?   -  person Ajeesh Joshy    schedule 04.05.2015


Ответы (4)


Метод extend позволяет передать сообщение в качестве третьего аргумента:

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

По умолчанию вы можете использовать только динамическую переменную, то есть :attribute. Если вы хотите добавить больше, используйте Validator::replacer():

Validator::replacer('my_custom_validation_rule', function($message, $attribute, $rule, $parameters){
    return str_replace(':foo', $parameters[0], $message);
});
person lukasgeiter    schedule 04.05.2015
comment
Есть ли способ сделать это сообщение динамическим? Я имею в виду, что мое сообщение зависит от значений $attribute, $value, $parameters. Могу ли я использовать закрытие, как второй параметр, для расширения? - person Ajeesh Joshy; 04.05.2015

Вы также можете определить сообщение для своего пользовательского правила проверки в файле переводов проверки.

/resources/lang/en/validation.php

....
'unique'                    => 'The :attribute has already been taken.',
'uploaded'                  => 'The :attribute failed to upload.',
'url'                       => 'The :attribute format is invalid.',
//place your translation here
'my_custom_validation_rule' => 'The :attribute value fails custom validation.'
person İlter Kağan Öcal    schedule 06.12.2017

В основном это то же самое, что и ответ @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');
person rmdwirizki    schedule 02.10.2019

возможный (не очень элегантный) обходной путь:

$message = 'my custom validation rule message' . request()->get('param');
Validator::extend('my_custom_validation_rule', function ($attribute, $value, $parameters) {
    //
}, $message);
person fico7489    schedule 26.10.2018