如何从嵌套的输入数组Laravel中获取图像

时间:2018-01-18 13:32:43

标签: php html laravel laravel-5 input

我试图在嵌套数组中获取输入值,如下图所示。但问题是图像数组丢失或者如果不是,我不知道如何获取图像文件的值。

这就是我想要的方式

 Array
    (
        [_token] => 7iSeeTphiVbpQw3iQ8eb1lReMRzxBY8Lt1lKqQea
        [food] => Array
            (
                [product[1] => Array
                    (
                        [name] => 1
                        [price] => 10
                        [image]=>Uploaded image here
                    )
            )

    )

但我实际得到的是这个

Array
(
    [_token] => 7iSeeTphiVbpQw3iQ8eb1lReMRzxBY8Lt1lKqQea
    [food] => Array
        (
            [product[1] => Array
                (
                    [name] => 1
                    [price] => 10
                )

            [product[2] => Array
                (
                    [name] => 1
                    [price] => 10
                )

        )

)

我的表格刀片就像这样

 <form method="POST" action="" enctype="multipart/form-data">
   {{csrf_field()}}
  <!-----PHP LOOP STARTS HERE ---->
<select class="form-control" name="food[product[$i][name]]">                                                    
  <option value="1">Fried rice</option>
  <option value="2">Demo food</option>
</select>
<input type="text" placeholder="set a price" class="form-control" name="food[product[$i][price]]">
<input type="file" placeholder="set a price" class="form-control" name="food[product[$i][image]]">
 <!-----PHP LOOP ENDS HERE ---->
<button type='submit'>Submit</button>

任何人都可以帮助我如何获取图像,以便我可以存储在文件夹中并将URL保存到数据库?在控制器

更新 我改变了表格

<input type="text" placeholder="set a price" class="form-control" name="product[$i][price]">
    <input type="file" placeholder="set a price" class="form-control" name="product[$i][image]">

在响应中我得到了

[product] => Array
        (
            [1] => Array
                (
                    [name] => 1
                    [price] => 10
                    [image] => Illuminate\Http\UploadedFile Object
                        (
                            [test:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 
                            [originalName:Symfony\Component\HttpFoundation\File\UploadedFile:private] => dell-inspiron-3567-notebook-original-imaetu5ch98vzge5.jpeg
                            [mimeType:Symfony\Component\HttpFoundation\File\UploadedFile:private] => image/jpeg
                            [size:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 40705
                            [error:Symfony\Component\HttpFoundation\File\UploadedFile:private] => 0
                            [hashName:protected] => 
                            [pathName:SplFileInfo:private] => C:\xampp\tmp\php17B2.tmp
                            [fileName:SplFileInfo:private] => php17B2.tmp
                        )

                )

完成后我可以看到图像正在上传。现在如何捕捉那个图像? 如果我尝试使用foreach循环,那么图像就会丢失。我正在为图像获取未定义的索引。 那我该怎么办?

2 个答案:

答案 0 :(得分:1)

您的表单中似乎没有文件字段。如果我理解正确,您希望用户能够上传图像。您需要将最后一个文本输入的类型更改为file。

<input type="file" placeholder="set a price" class="form-control" name="food[product[$i][image]]">

然后你可以在php中使用$ _FILES来获取你的图像。

希望这会有所帮助;)

答案 1 :(得分:0)

似乎无法以正常方式完成获取图像并验证Input::hasFile('image') or Input::file('image');是否存在 所以这就是我做到的。

for ($i = 1; $i<=count(Input::get('product'));$i++){
            $data['name']=$request->product[$i]['name'];
            if (isset($request->product[$i]['price']) && !empty($request->product[$i]['price']) && isset($request->product[$i]['image'])){
                $data['price']=$request->product[$i]['price'];

                //upload image
                $name= substr(md5(str_random(10)), 0, 8);
                $imageName = $name.'.'.$request->product[$i]['image']->getClientOriginalExtension();;
                $request->product[$i]['image']->move(public_path('images/food/'), $imageName);
                $data['image']= 'images/product/'.$imageName;
               if (Product::create($data)){
                   $msg ='All product has been successfully uploaded';
               }
            }else{
                $msg ='Opps!! Something went wrong.';
            }
        }

我不知道是否有更好的方法可以这样做。如果是的话请告诉我。

谢谢@qvotaxon帮助我,大家也再次感谢:))