【问题标题】:How to format the validation error messages in Laravel 5?如何格式化 Laravel 5 中的验证错误消息?
【发布时间】:2016-05-24 13:29:33
【问题描述】:

我正在使用 Laravel 5.1 构建一个 RESTful API - 发出发布请求时,我会验证输入,如果输入无效,我会抛出异常。

当前响应样本:

{
    "message": "{\"email\":[\"The email field is required.\"]}",
    "status_code": 400
}

如何让我的回复看起来像这样:

{
    "message": {
        "email": "The email field is required."
     },
    "status_code": 400
}

这是我抛出异常的方式:

$validator = Validator::make($this->request->all(), $this->rules());

if ($validator->fails()) {
    throw new ValidationFailedException($validator->errors());
}

【问题讨论】:

    标签: php json rest exception laravel-5


    【解决方案1】:

    我遇到了同样的问题,我通过解码 $validator->errors() 响应解决了这个问题

    return (400, json_decode($exception->getMessage()));
    

    【讨论】:

      【解决方案2】:

      这是我使用的一个类:

      <?php
      
      namespace App;
      
      class Hack
      {
          public static function provokeValidationException($field_messages){
              $rules = [];
              $messages = [];
              foreach($field_messages as $field=>$message){
                  $rules[$field] = 'required';
                  $messages[$field. '.required'] = $message;
              }
      
              $validator = \Validator::make([], $rules, $messages);
              if ($validator->fails()) {
                  throw new \Illuminate\Validation\ValidationException($validator);
              }
          }
      }
      

      然后,每当我需要显示自定义错误时,我都会这样做:

      \App\Hack::provokeValidationException(array(
          'fieldname'=>'message to display',
          'fieldname2'=>'message2 to display',
      ));
      

      【讨论】:

        【解决方案3】:

        你可以试试这个:

        $messages = [
            'email.required' => 'The :attribute field is required.',
        ];
        
        $validator = Validator::make($input, $rules, $messages);
        

        【讨论】:

          【解决方案4】:

          我认为在 laravel 中验证表单的最佳方法是使用 Form Request Validation 。您可以覆盖 App\Http\Request.php 类中的响应方法。
          Request.php

          namespace App\Http\Requests;
          Illuminate\Foundation\Http\FormRequest;
          
          abstract class Request extends FormRequest
          {
              public function response(array $errors)
              {
                  return $this->respond([
                          'status_code'   => 400 ,                                 
                          'message'          => array_map(function($errors){         
                                  foreach($errors as $key=>$value){
                                      return $value;                           
                                  }                       
                              },$errors)
                      ]);
              }
          
          
              /**
               * Return the response 
               */
              public function respond($data , $headers=[] ){
                  return \Response::json($data);
              }
          }
          

          【讨论】:

          猜你喜欢
          • 2017-01-06
          • 2017-01-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-09-07
          • 1970-01-01
          • 2017-12-28
          相关资源
          最近更新 更多