Я создаю простое веб-приложение REST API на Laravel + Vue. В компоненте Vue у меня есть метод с запросом api. Я упростил это, чтобы увидеть суть проблемы:
phpValidate() {
axios
.post("api/validate", self.programmer)
.then(function(response) {
console.info(response.status);
});
}
В контроллере у меня есть метод validateIt()
, который обрабатывает этот запрос "api/validate"
.
Он возвращает:
return array('status' => $status, 'data' => $data);
$status
может быть равен 200 или 422, в зависимости от входных данных.
Проблема в том, что с какого-то момента он стал возвращать $status
из 200 всегда.
Даже если я удалю весь код из метода validateIt()
и оставлю две строчки:
$status = 422;
return array('status' => $status);
Я до сих пор получаю 200.
Если я удалю весь метод в контроллере, он выдаст внутреннюю ошибку сервера 500.
.
Итак, маршрут и название функции правильные.
Когда кладу обратно, могу писать там что угодно, смысла нет - все равно 200 возвращает!
Если я использую отладчик, я вижу, что в конце метода validateIt()
он возвращает 422.
Но когда я получаю ответ в phpValidate()
, я снова вижу 200.
Невероятный!
Я пытался:
npm run dev
а также
php artisan cache:clear
не помогает!
Также я пытался перезапустить сервер и использовать разные браузеры, не помогает.
Собственно, проблема не в кешировании. Похоже, что имя переменной STATUS зарезервировано. Неважно, какое значение вы даете $ status в методе контроллера. Статус $ всегда содержит фактический статус запроса, и вы не можете изменить его вручную. Даже если метод пуст, он вернет статус $ 200, потому что запрос был успешным.
Решение состоит в том, чтобы использовать другое имя переменной для ваших собственных данных.