Не могу получить данные с формы в контроллере Laravel

Рейтинг: 0Ответов: 1Опубликовано: 28.04.2023

у меня есть проблема с получением данных с формы, я оправляю PUT запрос для изменения данных в базе. Данные я не получаю, при этом, если я использую вместо PUT POST оно работает, данные я смогу получить

Код отправки формы -

const dataImage = document.querySelector('#editAchievementImage').files[0];

    const formData = new FormData();
    formData.append('class_group_id', +props.classGroupId);

    // Проверка на изменение данных
    if (editAchievementTitle.value !== oldFormData.title) {
        formData.append('title', editAchievementTitle.value);
    }

    if (editAchievementDescription.value !== oldFormData.description) {
        formData.append('description', editAchievementDescription.value);
    }

    if (dataImage) {
        formData.append('image', dataImage);
    }

    userStore.actionEditAchievement(formData, achievementData.id)
        .then(mes => {
          useNuxtApp().$toast.success(
              mes, {
                autoClose: 2000,
              }
          );
          emit('updateData');
          editAchievementDialog.value = false;
        })
        .catch(mes => {
          useNuxtApp().$toast.error(
              mes, {
                autoClose: 2000,
              }
          );
        });

Код контроллера -

public function update(Request $request, Achievement $achievement)
    {
        return [
            'req' => $request->all(),
            'achi' => $achievement
        ];
    }

При этом если я пропишу $request->getContent() то получу такие данные -

------WebKitFormBoundarysZODbztnlbiLhLYr\r\nContent-Disposition: form-data; name=\"class_group_id\"\r\n\r\n7\r\n------WebKitFormBoundarysZODbztnlbiLhLYr\r\nContent-Disposition: form-data...

Ответы

▲ 0

Нашел решение проблемы, из-за того то axios.put не может нормально работать c FormData, и при отправке запроса, мы не можем получить данные формы на стороне Laravel. Поэтому нужно либо добавить в форму -

<input type="hidden" name="_method" value="PUT">

либо при генераций формы для отправки, добавить эту строку

formData.append('_method', 'PUT');

Ответ нашел благодаря доке, не стоит забывать про самый лучший источник информаций...

https://laravel.com/docs/10.x/routing#form-method-spoofing