Недавно решил оптимизировать запросы, убрать полностью с сайта jQuery и перейти на axios.
Все бы ничего, удаление и добавление записи пошло норм. А вот с валидацией наступила полная засада. Просто не возвращался reject а красным куча ошибок в консоли. Порыл интернет и вот что нашел:
При обработке запросов ajax с помощью Laravel часто возникают две ошибки: 419 и 422.
Как получить ответ валидации Laravel и ошибки валидации с помощью axios
Недавно решил оптимизировать запросы, убрать полностью с сайта jQuery и перейти на axios.
Все бы ничего, удаление и добавление записис рпошло норм. А вот с валидацией наступила полная засада. Просто не возвращался reject а красным куча ошибок в консоли. Порыл интернет и вот что нашел:
При обработке запросов ajax с помощью Laravel часто возникают две ошибки: 419 и 422.
Код 419 говорит о том, что у вас отсутствует csrf token.
Чтобы решить эту проблему, просто поместите это в свой head:
И передайте его с каждым запросом, который вы отправляете в Laravel. (Для маршрутов в web.php файле) Если вы используете axios, вы можете либо добавить его в свою глобальную конфигурацию axios:
Эта ошибка возникает при сбое проверки со стороны сервера. Если вы попросите Laravel обновить вашу страницу после POST запроса, вы получите ошибки в @errors директиве и прочем, но обычно эти запросы и ответы идут через ajax либо потому, что так удобнее пользователям, либо вы используете фреймворк, как React или Vue.
Вот как вы можете решить 422 Unprocessable Entity проблему axios.
Предположим, вы проверяете свою форму с помощью полей ввода электронной почты и пароля:
Поскольку axios — это библиотека на основе Promise, вы можете отлавливать ошибки в catch блоках. Однако проблема в том, что даже если вы добавите блок catch после вашего then, это не поможет вам получить информацию об ошибке в вашем браузере. При попытке его логировать вы скорее всего получите что-то вроде этого вместо аккуратного json с ошибками:
К счастью, решение простое. Когда вы получаете доступ к данным об ошибках, используйте error.response вместо этого error в своем блоке catch следующим образом:
axios
.post(endpoint, body, headers)
.then(response => {
// Do fancy stuff
})
.catch(error => {
console.log(error.reponse); // logs an object to the console
// Do something with error data
});
Здесь error.response объект с несколькими полезными свойствами, такими как status, statusText и data.
Последнее то, что мы ищем. Там можно найти message свойство с общим описанием и errors объект с подробными ошибками проверки.
В error.response.data.errors объекте ключами являются входные имена, а значениями являются массивы(!) строк, описывающих ошибки.
Теперь давайте сделаем еще один шаг и воспользуемся некоторыми интересными функциями, предоставляемыми axios. Axios дает нам возможность добавлять перехватчики к нашим запросам и ответам. Это позволяет нам последовательно изменять запросы и ответы и придерживаться принципа DRY.
Если вы не знакомы с концепцией перехватчиков, вы можете думать об этом следующим образом:
Для запросов они изменяют данные вашего запроса перед отправкой на сервер,
Для ответов они изменяют ответ перед всеми вашими блоками then и .catch
Я долго мучался с этим вопросом, как получить все отношения другой модели если они к тому же полиморфные, у меня стояла задача получить все комментарии заведений в категории заведений. нарыл эту статью, она решила мой вопрос.
Представьте себе проект Laravel с более чем 100 маршрутами, отдельным разделом для гостей, пользователей, администраторов и т. д. Вы действительно хотите хранить все это в одном файле? Как их сгруппировать, добавить префиксы к URL? Давайте посмотрим, какие у нас есть варианты.