Ошибка исключения: преобразование массива в строку в файле

#laravel

#laravel

Вопрос:

У меня проблема при обновлении данных URLImg, когда я использую метод PUT, он выдает следующую ошибку в Postman’ErrorException: преобразование массива в строку в файле’, но если я использую метод POST, у меня не возникает проблем с загрузкой URL-адресов моих изображений.

 public function store(Request $request)
    {

        $values = $request->except('URLImg');
        $data = $request->only('URLImg[]');
        if($request->hasFile('URLImg')){
            foreach($request->file("URLImg") as $image)
            {
                $name = Str::random(10).'.'.$image->getClientOriginalExtension();
                $path = 'storage/img/';
                $image->move($path, $name);
                $data[] = $name;
         
                $tramite = Tramite::create($values);
                $tramite->URLImg = json_encode($data);
                $tramite->save();
            }
        }else{
            $tramite = Tramite::create($values);
            $tramite->save();
        }

        return response()->json($tramite, 201);

public function update(Request $request, Tramite $tramite)
    {
        $data = $request->only('URLImg[]');
        if($request->hasFile('URLImg')){
            foreach($request->file("URLImg") as $image)
            {
                $name = Str::random(10).'.'.$image->getClientOriginalExtension();
                $path = 'storage/img/';
                $image->move($path, $name);
                $data[] = $name;
         
                $tramite->URLImg = json_encode($data);
                $tramite->save();
            }
        }

        return response()->json($tramite, 201);
    }
 

Конфигурация Postman
Конфигурация Postman

Да, это почти тот же код, но мне нужно только обновить поле URLImg

Комментарии:

1. В вашем сообщении об ошибке также указывается, какая именно строка кода вызывает проблему.

Ответ №1:

Хотите использовать запрос PUT или PATCH для формы, содержащей загружаемые файлы — отправьте запрос POST с подменой метода

 <form action="/foo/bar" method="POST">
    @method('PUT')

    ...
</form>
 

через любой фреймворк javascript, такой как vue

 let data = new FormData;
data.append("_method", "PUT")

axios.post("some/url", data)
 

Использование _method и установка для него значения ‘PUT’ или ‘PATCH’ позволит объявлять маршрут как маршрут PUT и по-прежнему использовать POST-запрос для отправки данных формы

$_FILES не будет заполняться при запросе PUT или PATCH с ограничением multipart / form-data — PHP