php 如何修复代码并从react到laravel发出post请求?

33qvvth1  于 12个月前  发布在  PHP
关注(0)|答案(1)|浏览(79)

我们必须把数据发送到后端。后端给我们的结构,它可以接收数据。这是用PHP laravel接收数据的代码:

public function store(ProductRequest $request, UploadImageService $uploadImageService){
       // dd($request->all());
        $product = Product::create($request->validated());

        if ($request->hasFile('image')) {
            $uploadImageService->upload($product, 'image', 'product_images', true, false);
        }
     else{
        return response()->json(['image must be file'],422);
     }
        if ($request->has('color_image')) {
            $data=[];
            foreach ($request->color_image as $key => $images) {
                $data[]=$images;
              
              
            }
            /* dd($data); */
            foreach ($data as $image) {
             /*    dd($image); */
                $mediaItem = $product->addMedia($image)->toMediaCollection('products_images');
                $mediaItem->setCustomProperty('color_id', $key);
                
                $mediaItem->save();
            }
        }
    /*     dd('gfdd'); */
        if ($request->filled('sizes')) {
            $product->sizes()->sync($request->sizes);
        }

        if ($request->filled('categories')) {
            $product->categories()->sync($request->categories);
        }

        if ($request->filled('genders')) {
            $product->genders()->sync($request->genders);
        }
      
        if ($request->filled('colors')) {
            $colors = $request->colors;
          

            if ($product->colors()->count() > 0) {
                for ($i = 0; $i < count($colors['color_id']); $i++) {
                    $product->colors()->attach($colors['color_id'][$i], [ 'stock' => $colors['stock'][$i]]);
              
                }
              

            } else {
            
                $product->colors()->detach();
               // dd(count($colors['color_id']));
                for ($i = 0; $i < count($colors['color_id']); $i++) {
                    $product->colors()->attach($colors['color_id'][$i], [ 'stock' => $colors['stock'][$i]]);
                }
            }

        }
     
        if ($request->filled('materials')) {
            $product->materials()->sync($request->materials);
        }
    

        return $this->successResponse($product);
    }

下面是react中我们发布数据的代码。当我们console.log数据时,它准确地给出了后端想要的结构。在 Postman 一切正常,但当我们点击发送按钮,它返回“500内部服务器错误”和后端无法接收数据。

const colors = { 'color_id[]': [...arrColorId], stock: [...arrColorStock] };
req.append("colors", JSON.stringify(colors));
dispatch(saveNewProduct(req));

这是后端开发人员告诉我的数据应该是:

array:2 [ // app/Http/Controllers/Back/ProductController.php:60
  "color_id" => array:1 [
    0 => "1"
  ]
  "stock" => "21"
]

我们的代码在登录时就是这样的

hzbexzde

hzbexzde1#

我认为错误是当你创建一个包含图像对象的验证数组的产品时,这意味着数据库会给你一个错误,因为你试图将不支持的数据类型插入数据库。尝试先上传图像,然后将其在验证数组中的值替换为上传的路径,如下所示:

$data = $request->validated();
$path = upload($request->file('profile_image'));
$data['profile_image']=$path;

如果这不起作用,那么尝试将异常的堆栈跟踪粘贴到laravel日志中

相关问题