Я хотел бы выяснить, как создавать собственные сообщения об ошибках для ваших правил (например, правил регулярных выражений), которые будут повторно использоваться как сервером 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