【问题标题】:proengsoft/laravel-jsvalidation How to use Custom Rule Messages?proengsoft/laravel-jsvalidation 如何使用自定义规则消息?
【发布时间】: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 一起使用 - 或者它是否一定需要我提出拉取请求并希望它会被修复......有一天?我想现在就完成这项工作。

【问题讨论】:

    标签: laravel validation jsvalidation


    【解决方案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(如果需要)。

    【讨论】:

      猜你喜欢
      • 2015-08-22
      • 2017-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-07
      • 2020-12-13
      • 2023-03-20
      相关资源
      最近更新 更多