Я использую 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