Как вы отображаете свои собственные сообщения об ошибках с laravel -jsvalidation? - PullRequest
0 голосов
/ 04 апреля 2020

Я хотел бы выяснить, как создавать собственные сообщения об ошибках для ваших правил (например, правил регулярных выражений), которые будут повторно использоваться как сервером PHP, так и клиентом javascript (используя jqueryvalidation через laravel -jsvalidation )

Я пытался и не могу заставить его работать, и ниже приведен небольшой пример, показывающий, что я пытаюсь сделать, но он не работает.

Что я делаю не так?

Мой маленький пример:

В файле "rout \ 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 с веб-браузером, а затем «просмотреть исходный код» Я вижу, что приведенный выше код $ 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]]}}            });
        });
    });

Действительно, сообщение об ошибке, которое я получаю, когда не пишу три цифры в поле через мой веб-браузер, как указано выше "Трехзначный формат недопустим." в то время как я ожидаю, что вместо этого должно быть «Должно быть ровно три цифры», как я определил в массиве «messages».

Я видел, что с Laravel возможно создать PHP классы с «Пользовательские правила проверки», в которых вы также можете определять пользовательские сообщения, но, насколько я понимаю, если вы используете эти пользовательские правила с laravel -jsvalidation, тогда проверка должна выполняться с AJAX вместо javascript проверки непосредственно в браузер, что я и хочу делать вместо AJAX вызовов.

Я использую следующие версии:

laravel / framework v7.4.0

proengsoft / laravel -jsvalidation 3.0.0

...