Laravel Extended Validation custom message

后端 未结 4 1948
灰色年华
灰色年华 2021-01-04 10:03

I wanted to create this extended validation.

Validator::extend(\'my_custom_validation_rule\', function ($attribute, $value, $parameters) {
   // I guess I s         


        
相关标签:
4条回答
  • 2021-01-04 10:36

    The extend method allows to pass the message as a third argument:

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

    By default you can only use dynamic variable, which is :attribute. If you want to add more use Validator::replacer():

    Validator::replacer('my_custom_validation_rule', function($message, $attribute, $rule, $parameters){
        return str_replace(':foo', $parameters[0], $message);
    });
    
    0 讨论(0)
  • 2021-01-04 10:37

    possible (not very elegant) workaround is :

    $message = 'my custom validation rule message' . request()->get('param');
    Validator::extend('my_custom_validation_rule', function ($attribute, $value, $parameters) {
        //
    }, $message);
    
    0 讨论(0)
  • 2021-01-04 10:49

    This is basically the same way as @lukasgeiter answer, but in case you need to manage dynamic variable inside the extend function, you can use $validator->addReplacer inside the extend directly.

    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');
    
    0 讨论(0)
  • 2021-01-04 10:57

    You can also define the message for your custom validation rule under validation translations file.

    /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.'
    
    0 讨论(0)
提交回复
热议问题