proengsoft/laravel-jsvalidation 如何使用自定义规则消息?
Posted
技术标签:
【中文标题】proengsoft/laravel-jsvalidation 如何使用自定义规则消息?【英文标题】:proengsoft/laravel-jsvalidation How to use Custom Rule Messages? 【发布时间】:2018-08-30 18:48:13 【问题描述】:我将proengsoft/laravel-jsvalidation 与我通过服务提供者中的Validator::extend(...) 定义的自定义FormRequest 和自定义验证规则结合使用。这很好用。
但是,当我将自定义规则移植到 Laravel 5.5+ 中的新(ish)自定义 Rule 类时,JsValidator 无法获取我的自定义规则消息。
我有这个自定义规则:
use Illuminate\Contracts\Validation\Rule;
class MyRule implements Rule
public function passes($attribute, $value)
return $value > 10;
public function message()
return 'Your :attribute is pretty small, dawg!';
我的表单请求使用此规则:
use Illuminate\Foundation\Http\FormRequest;
use App\Rules\MyRule;
class MyRequest extends FormRequest
public function authorize()
return true;
public function rules()
$rules = [
'foo' => 'required|numeric',
'bar' => ['required', new MyRule()],
];
return $rules;
这应该可以,但是我得到了一个异常
!! JsValidator::formRequest('\App\Http\Requests\MyRequest') !!
Proengsoft\JsValidation\javascript\MessageParser.php 调用 Str::snake(Object(App\Rules\MyRule)) 引发异常。
JsValidation在调用Validator之前不看$rule对象类型->getMessage($attribute, $rule) 相反,它应该调用 $rule->messages();
我能否以某种方式解决此错误,并将 laravel-jsvalidation 与我的自定义 Rule 和 FormRequest 一起使用 - 或者它是否一定需要我提出拉取请求并希望它会被修复......有一天?我想现在就完成这项工作。
【问题讨论】:
【参考方案1】:这可以通过传递基于规则和消息数组的JsValidator实例来归档,而不是传递表单请求。在控制器中将此实例传递给刀片。阅读here了解更多详情。
JsValidator::make($rules, $messages, $customAttributes, $selector)
在控制器中,
$validator = JsValidator::make(
[
'name' => 'required',
],
[
'name.required' => 'Name field is a required field',
]
)
return View::make("Your view", compact($validator));
在刀片中,
!! $validator->selector('.wizard_frm') !!
<form class='wizard_frm'></form>
在这种情况下,我们可以创建请求类的对象并将规则函数返回的数组传递给JsValidator::make
(如果需要)。
【讨论】:
以上是关于proengsoft/laravel-jsvalidation 如何使用自定义规则消息?的主要内容,如果未能解决你的问题,请参考以下文章