proengsoft / laravel-jsvalidation如何使用自定义规则消息?

时间:2018-03-21 15:07:17

标签: laravel validation jsvalidation

我将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一起使用 - 或者它是否一定要求我提出拉取请求并希望它将被修复...某天?我现在想把这项工作搞好。

1 个答案:

答案 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