Почему `-> setStatusCode (422)` меняет ответ laravel - PullRequest
0 голосов
/ 27 июня 2019

Так что в основном я работал над простой системой загрузки с laravel.Но теперь проблема заключается в проверке запроса. Я пытаюсь проверить, соответствует ли загрузка некоторым требованиям. Если это не так,

  • отправляет http-код состояния 422 (что означает необработанный объект) и * 1004.*
  • отправить ошибки валидатора, например, Title field is required.

Проблема в том, что я не могу заставить его оба .

Если яиспользуйте этот код (с ->setStatusCode(422)):

if (isset($request->validator) && $request->validator->fails()) 
{




        return back()
    ->withInput()
    ->setStatusCode(422)
    ->withErrors($request->validator->errors());
        //return back()->withError($request->validator->errors())->setStatusCode(422);


}

Он отправляет правильный код состояния , но не отправляет ошибки Он показывает только это:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8" />
        <meta http-equiv="refresh" content="0;url=http://localhost:8000/dashboard/posts/create/?type=image" />

        <title>Redirecting to http://localhost:8000/dashboard/posts/create/?type=image</title>
    </head>
    <body>
        Redirecting to <a href="http://localhost:8000/dashboard/posts/create/?type=image">http://localhost:8000/dashboard/posts/create/?type=image</a>.
    </body>
</html>

..... что бы это ни значило.

Но если я опущу ->setStatusCode(422) (или закомментирую) в коде как:

if (isset($request->validator) && $request->validator->fails()) 
{




        return back()
    ->withInput()
    //->setStatusCode(422)
    ->withErrors($request->validator->errors());
        //return back()->withError($request->validator->errors())->setStatusCode(422);


}

Он отправляет правильные ошибки валидаторано отправляет 200 (ОК) http код статуса, который не тот, который я хочу.

Пожалуйста, любые советы будут оценены.

1 Ответ

2 голосов
/ 27 июня 2019

back() возвращает ответ о перенаправлении.Ответ перенаправления имеет статус кода от 300 до 399 (обычно это 301 или 302).Браузер будет выполнять перенаправление только в том случае, если статус ответа находится в диапазоне от 300 до 399.

Что вам следует сделать, это вообще не менять код состояния, поскольку ошибка проверки возникает на странице X, и вы перенаправляете обратно на страницу YЕсли страница Y не вызывает никаких ошибок, вы не должны показывать устаревший код состояния.Произошла ошибка, но теперь вы где-то еще.Слишком поздно для отображения ошибок.

Альтернатива вообще не перенаправляет, а вместо этого показывает страницу ошибки с правильным кодом состояния здесь со ссылкой, которая может при желании вернуть пользователя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...