如何使用 laravel-jsvalidation 显示您自己的错误消息?

How do you display your own error messages with laravel-jsvalidation?

我想弄清楚如何为您的规则(例如正则表达式规则)创建您自己的错误消息,以供服务器 PHP 和客户端 javascript 重用(使用 jqueryvalidation through laravel-jsvalidation )

我已经尝试过但无法让它工作,下面是一个小例子来说明我正在尝试做什么但它不起作用。

我做错了什么?

我的小例子:

文件中"routes\web.php":

    Route::get('/minimal_example_laravel_jsvalidation', function() {
        // Of course these rules should not really be defined here since 
        // the purpose of the rules is to also reuse them from PHP Laravel code
        // but my problem is now how to generate javascript that can 
        // reuse the same rules and therefore I just put the rules and messages
        // here in this minimalistic example illustrating the problem
        $rules = [
            'three_digits' => 'required|regex:/^\d{3}$/'
        ];    
        $messages = [
            'three_digits' => 'Must be exactly three digits'
        ];
        $validator = JsValidator::make($rules, $messages);
        return view('minimal_example_laravel_jsvalidation')->with("validator", $validator);
    });    

文件中"resources\views\minimal_example_laravel_jsvalidation.blade.php":

...
{!! $validator->selector('#myForm') !!}
...

当使用 URL http://localhost:8000/minimal_example_laravel_jsvalidation 使用网络浏览器,然后 "view source" 我可以看到上面的“$validator->selector”生成了以下 javascript 代码:

    jQuery(document).ready(function(){

        $("#myForm").each(function() {
            $(this).validate({
                errorElement: 'span',
                errorClass: 'invalid-feedback',

                errorPlacement: function (error, element) {
                    if (element.parent('.input-group').length ||
                        element.prop('type') === 'checkbox' || element.prop('type') === 'radio') {
                        error.insertAfter(element.parent());
                        // else just place the validation message immediately after the input
                    } else {
                        error.insertAfter(element);
                    }
                },
                highlight: function (element) {
                    $(element).closest('.form-control').removeClass('is-valid').addClass('is-invalid'); // add the Bootstrap error class to the control group
                },



                unhighlight: function(element) {
                    $(element).closest('.form-control').removeClass('is-invalid').addClass('is-valid');
                },

                success: function (element) {
                    $(element).closest('.form-control').removeClass('is-invalid').addClass('is-valid'); // remove the Boostrap error class from the control group
                },

                focusInvalid: true,

                rules: {"three_digits":{"laravelValidation":[["Required",[],"The three digits field is required.",true],["Regex",["\/^\d{3}$\/"],"The three digits format is invalid.",false]]}}            });
        });
    });

事实上,当我没有通过网络浏览器在字段中写入三位数字时收到的错误消息如上 "The three digits format is invalid." 而我希望它应该是 "Must be exactly three digits" 我在“$messages”数组。

我看到可以使用 Laravel 创建 PHP 类 和 "Custom Validation Rules",您还可以在其中定义自定义消息,但据我了解,如果您将这些自定义规则与 laravel-jsvalidation 一起使用,则必须直接在浏览器中使用 AJAX 而不是 javascript 验证来完成验证,这是我想做的而不是做的AJAX 个调用。

我正在使用这些版本:

laravel/framework v7.4.0

proengsoft/laravel-jsvalidation 3.0.0

尝试像这样更改消息数组,

$messages = [
     'three_digits.required' => 'Three Digits field is required',
     'three_digits.regex' => 'Must be exactly three digits'
];

请注意,我还向消息密钥添加了规则。 ('three_digits.required')