我将proengsoft/laravel-jsvalidation与我在服务提供商中通过Validator :: extend(...)定义的自定义FormRequest和自定义验证规则结合使用。这很有效。
但是,当我将自定义规则移植到Laravel 5.5+中的新(ish)自定义规则类时,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))抛出异常。
在调用Validator-> getMessage($ attribute,$ rule)之前,JsValidation不会查看$ rule对象类型 相反,它应该调用$ rule-> messages();
我可以以某种方式解决这个错误,并将laravel-jsvalidation与我的自定义规则和FormRequest一起使用 - 或者它是否一定要求我提出拉取请求并希望它将被修复...某天?我现在想把这项工作搞好。
答案 0 :(得分:0)
可以通过基于规则和消息数组传递 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
。