Laravel如何将自定义验证消息放入验证包?

时间:2018-09-06 15:02:15

标签: laravel validation laravel-5.6

如何将来自外部验证器的错误消息放入消息袋? 关键是:我从API收到验证程序的错误响应,我想将错误消息推送到页面上现有的验证程序。

因此,我有一个可以通过页面上的laravel验证程序和API验证程序进行验证的表单。

我尝试过的是:

dd(ValidationException::withMessages([ 'email' => $errors->email, ]));,其中$errors->email只是一条错误消息。但是,它的工作方式与在本地项目上内部进行验证,验证消息未转换等不同……

我也尝试过

throw ValidationException::withMessages([
      $validator->errors()->add('email', $errors->email[0])
]);

更接近解决方案的地方: 在ValidationException中,我有异常的实例,但是message属性太嵌套了:

{

"validator": {
     "messages": {
         "0" => [
             0 => MessageBag(2)
          ]
      }
   }
}

消息太嵌套,仍然与本地消息不同。

如果我不太清楚,我可以提供进一步的解释。

编辑:

要从API中获取错误,请使用:

$errors = $response->getErrors()->email;这给了我

array:1 [▼
  0 => {#784 ▼
    +"code": 42252
    +"message": "The email has already been taken."
  }
] 

所以我不能使用$response->getErrors()->email->first()

4 个答案:

答案 0 :(得分:1)

尝试以下操作以首先设置错误:

ValidationException::withMessages([
    "email" => $errors->email->first()
]);

但是,我对您如何选择显示错误更感兴趣。

请记住,不要在Laravel中使用键访问器来访问集合中的对象,也不要将它们转换为数组。 Eloquent和Collection方法几乎可以通过立面继承在几乎所有集合对象上通用,并且非常有用。

https://laravel.com/docs/5.6/validation#customizing-the-error-messages

编辑:另外,也许搜索并重新阅读本页上的“命名错误包”部分和“自定义错误消息”部分。如果我无法与您更紧密地联系,他们可能会为您提供触发找到解决方案的机会。

答案 1 :(得分:0)

最好使用表单请求验证

Documentation

例如:

class UpdateName extends BaseRequest {

    public function rules()
    {
        return [
            'name' => 'required',
        ];
    }

    public function messages()
    {
        return [
        'name.required' => 'Your name is required or any custom msg',
        ];
    }
}

答案 2 :(得分:0)

尝试使用$ php artisan make:request MyNewRequestName做自己的请求验证器

class MyNewRequestName extends BaseRequest {

    public function rules()
    {
        return [
            'input_field' => 'required|integer',
        ];
    }

    public function messages()
    {
        return [
            'input_field.required' => 'This field is required',
            'input_field.integer'  => 'This field must contain integers only',
        ];
    }
}

然后,在您的控制器中:

public function update( MyNewRequestName $request )
{
    //... another code here
}

答案 3 :(得分:0)

以这种方式使用。

    throw  \Illuminate\Validation\ValidationException::withMessages([
         'email' => 'Your validation message'
   ]);