Ключевые понятия DynamoDB
Допустим, вы хотите сохранить информацию о списке клиентов, включая их name, email, и phone.
Недавно решил оптимизировать запросы, убрать полностью с сайта jQuery и перейти на axios. Все бы ничего, удаление и добавление записи пошло норм. А вот с валидацией наступила полная засада. Просто не возвращался reject а красным куча ошибок в консоли. Порыл интернет и вот что нашел: При обработке запросов ajax с помощью Laravel часто возникают две ошибки: 419 и 422.
Table of contents [Show]
Недавно решил оптимизировать запросы, убрать полностью с сайта jQuery и перейти на axios.
Все бы ничего, удаление и добавление записис рпошло норм. А вот с валидацией наступила полная засада. Просто не возвращался reject а красным куча ошибок в консоли. Порыл интернет и вот что нашел:
При обработке запросов ajax с помощью Laravel часто возникают две ошибки: 419 и 422.
csrf token
.Чтобы решить эту проблему, просто поместите это в свой head
:
<meta name="csrf-token" content="{{ csrf_token() }}" />
И передайте его с каждым запросом, который вы отправляете в Laravel. (Для маршрутов в web.php
файле) Если вы используете axios, вы можете либо добавить его в свою глобальную конфигурацию axios:
axios.defaults.headers = { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), },
Или укажите при создании экземпляра axios:
const instance = axios.create({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'), }, });
422 Unprocessable Entity
решениеЭта ошибка возникает при сбое проверки со стороны сервера. Если вы попросите Laravel обновить вашу страницу после POST
запроса, вы получите ошибки в @errors
директиве и прочем, но обычно эти запросы и ответы идут через ajax либо потому, что так удобнее пользователям, либо вы используете фреймворк, как React или Vue.
Вот как вы можете решить 422 Unprocessable Entity
проблему axios.
Предположим, вы проверяете свою форму с помощью полей ввода электронной почты и пароля:
$request->validate([ 'email' => 'required|min:4', 'password' => 'required|min:9' ]);
Поскольку 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
Если вы хотите узнать больше, ознакомьтесь с документацией axios по этой теме.
Используя перехватчики, мы можем добавить дополнительный слой:
instance.interceptors.response.use( response => response, error => Promise.reject(error.response) );
Обратите внимание, что мы пересылаем как обычный ответ, так и сообщение об ошибке.
async function postData(_url, query) { let _token = <strong><em>document</em></strong>.querySelector('meta[name="csrf-token"]').content; return await axios.post(_url, query, { headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': _token, 'X-Requested-With': 'XMLHttpRequest', } }).then(response => { // console.log(response.data) return response.data; }).catch(error => { // console.log(error.response); return error.response; }); }
const args = JSON.stringify({ title: title, description: description, location: location, phone: phone, email: email, website: website }); const query = await postData(_url, args);
И в основном это все!
Если вам есть что добавить, нашли ошибку или просто хотите поболтать, свяжитесь со мной в комментах или напишите по электронной почте 🙂
Допустим, вы хотите сохранить информацию о списке клиентов, включая их name, email, и phone.
Laravel Auditing позволяет вам вести историю изменений модели, просто используя трейт. Получить данные для проверки несложно, что позволяет отображать их различными способами. По сути вы можете увидеть все изменения всех полей до и после редактирования поста, что весьма удобно.
Я долго мучался с этим вопросом, как получить все отношения другой модели если они к тому же полиморфные, у меня стояла задача получить все комментарии заведений в категории заведений. нарыл эту статью, она решила мой вопрос.