2016-02-13 58 views
1

我正在用Laravel 5.1构建一个RESTful API - 当发布一个post请求时,我验证输入,如果输入无效,我抛出一个异常。如何在Laravel 5中格式化验证错误消息?

电流响应样本:

{ 
    "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()); 
} 

回答

1

你可以试试这个:

$messages = [ 
    'email.required' => 'The :attribute field is required.', 
]; 

$validator = Validator::make($input, $rules, $messages); 
2

我认为在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); 
    } 
} 
0

这是一类使用:

<?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', 
));