Laravel 5.2 – Проверка с помощью API

Я использую Laravel 5.2 для проверки с помощью REST JSON API.

У меня есть UserController который расширяет Controller и использует свойство ValidatesRequests .

Образец кода:

 $this->validate($request, [ 'email' => 'required|email', 'password' => 'required|min:4|max:72', 'identifier' => 'required|min:4|max:36', 'role' => 'required|integer|exists:role,id', ]); 

Это вызывает исключение, поэтому в моем Exceptions/Handler.php меня есть этот код:

 public function render($request, Exception $e) { return response()->json([ 'responseCode' => 1, 'responseTxt' => $e->getMessage(), ], 400); } 

Однако, когда проверка responseTxt всегда:

 Array ( [responseCode] => 1 [responseTxt] => The given data failed to pass validation. ) 

Я использовал Laravel 4.2 в прошлом и помню ошибки проверки, в которых содержится более подробная информация о том, что не удалось проверить.

Как я могу узнать, какая область не прошла проверку и почему?

В Laravel 5.2 метод validate () генерирует исключение Illuminate \ Validation \ ValidationException, поэтому, если вы хотите получить ответ, используйте getResponse () вместо getMessage ().

Например, простой способ справиться с этим исключением мог бы сделать что-то вроде этого:

 try{ $this->validate($request, [ 'email' => 'required|email', 'password' => 'required|min:4|max:72', 'identifier' => 'required|min:4|max:36', 'role' => 'required|integer|exists:role,id' ]); }catch( \Illuminate\Validation\ValidationException $e ){ return $e->getResponse(); } 

ValidationException которая получает визуализацию как одно общее сообщение, если запрос хочет JSON.

Вместо использования метода validate () вручную вызовите валидатор, например:

 $validator = Validator::make($request->all(), [ 'email' => 'required|email', 'password' => 'required|min:4|max:72', 'identifier' => 'required|min:4|max:36', 'role' => 'required|integer|exists:role,id', ]); if ($validator->fails()) { return new JsonResponse(['errors' => $validator->messages()], 422); } 

https://laravel.com/docs/5.2/validation#manually-creating-validators

В стороне я бы рекомендовал код статуса 422 HTTP, а не 400. 400 обычно подразумевает искаженный синтаксис. Что-то, что вызывает ошибку проверки, обычно означает, что синтаксис верен, но данные недействительны. 422 означает «Непроцессная организация» https://tools.ietf.org/html/rfc4918#section-11.2