Как настроить ответ ValidationException в Lumen? - PullRequest
0 голосов
/ 09 июня 2019

Я разрабатываю REST API с использованием Lumen.Я думал, что использование ключа details внутри объекта JSON удобно для отображения ошибок.Смотрите ответ:

{"detail": "Something bad happened."}

У Lumen есть проверка, которую вы можете вызвать внутри контроллера, как в $this->validate(["foo" => "required", "bar" => "required"}).Если я не установлю значение foo в теле запроса, сервер естественным образом ответит:

{
    "foo": [
        "The foo field is required."
    ]
}

Однако я также хочу, чтобы они были внутри клавиши details, чтобы это было удобно для потребителя.Смотрите желаемый ответ:

{
    "details": {
        "foo": [
            "The foo field is required."
        ]
    }
}

Возможно ли это сделать, если да, то как?

Дальнейшее расследование

Как Валидационный раздел в документации Lumen состояния:

В случае сбоя проверки помощник $ this-> validate сгенерирует Illuminate \ Validation \ ValidationException со встроенным ответом JSON, включающим все соответствующие сообщения об ошибках.

Это означает, что каким-то образом мне нужно расширить ValidationException, но я до сих пор не представляю, как вызвать метод CustomValidationException in $this->validate.


Environment

  • PHP 7.3.5
  • Люмен 5.8

1 Ответ

1 голос
/ 24 июня 2019

Вы можете присвоить результат $ this-> validate () переменной и использовать эту переменную в своем ответе json в соответствии с вашим выбором.Например:

 $validator = Validator::make($request->all(), [
            'foo' => 'required'
        ]);

        if ($validator->fails()) {
            return response()->json(['details'=> $validator->errors()->first() ], 400);
        }

400 - это ответ json.Вы можете использовать это или нет

...