【问题标题】:Laravel request validation message formattingLaravel 请求验证消息格式
【发布时间】:2021-07-11 14:56:46
【问题描述】:

使用 Laravel Form Request Validation
如何自定义回复格式

例如,它显示错误消息为:

{
   "password":[
      "The password field is required."
   ],
   "password_confirmation":[
      "The password confirmation field is required."
   ]
}

我想将所有错误消息放入描述属性中,例如。

{
   "status":false,
   "description":[
      "The password field is required.",
      "The password confirmation field is required."
   ]
}

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    就在您提供的文档链接的正下方:

    您可以通过以下方式自定义表单请求使用的错误消息 覆盖消息方法。这个方法应该返回一个数组 属性/规则对及其对应的错误消息。

    所以,把它放在你的请求中:

    public function messages()
    {
        return [
            'password.required' => 'The password field is required.',
            'password_confirmation.required'  => 'The password confirmation field is required.',
        ];
    }
    

    【讨论】:

      【解决方案2】:

      另一种创建自定义验证消息的方法是将您自己的消息数组传递给控制器​​操作中的validate 函数。 validate 函数将带有自定义消息的数组作为第三个参数。

      public function listing(Request $request)
      {
          $messages = [
              'search_input.alpha_dash' => 'Please enter a valid search term. Only use letters, dashes and underscores.',
          ];
      
          $this->validate($request, [
              'search_input' => 'alpha_dash',
          ], $messages);
      
      
          return view('videos.index');
      }
      

      【讨论】:

        【解决方案3】:

        要将所有错误消息提取到数组中,您需要执行以下操作...

        $validator = Validator::make($request->all(), [
            'password' => 'required',
            'password_confirmation' => 'required|same:password',
        ]);
        
        $messages = $validator->errors()->toArray();
        /* ** This will give you something like this **
        *
        *       'password' => 'The password field is required.',
        *       'password_confirmation' => 'The password confirmation field is required.'
        *
        * **/
        
        // If you want only array values - as your example of description, then use php's array_values() method like this...
        
        $description_arr = array_values($messages);
        

        谢谢希望这对你有帮助..!! 为了更好地理解 Laravel 验证,请阅读其文档 - Laravel Validation Docs

        【讨论】:

          【解决方案4】:

          我知道这个问题是2016年的,

          我在 2021 年回答这个问题,因为今天我发现了同样的问题。

          如果你使用的是 Laravel 8(按照今天),这就是我所做的。

          创建您自己的表单请求,使用php artisan make:request IndonesiaInsertRequest 它将构建一个新的自定义类

          在新类中覆盖failedValidation 函数,如下所示。

          protected function failedValidation(Validator $validator){
             $responseformat = ["myerror"=>$validator->errors()];
             new HttpResponseException(response()->json($responseformat, 200));
          }
          

          用你想要的任何形式更改$responseformat

          【讨论】:

            【解决方案5】:
            public function rules()
            {
                return [
                   'password' => [ 'required' , 'min:4','confirmed' ] ,
                   'password_confirmation' => [ 'required' , 'min:4' ]
                ];
            }
            

            【讨论】: