Laravel 5.2 - 无法更新多个图像,未定义的偏移量:0

时间:2016-04-26 06:24:02

标签: php arrays laravel image-uploading laravel-5.2

我尝试用里面的多个图片更新表格字段。创建形式它工作正常,但问题是当我尝试更新它时。

所以这里是更新功能的控制器:

 public function update(Request $request, $id)
{
    $update = new Product($request->all());
    $product=Product::find($id);

    $picture = ''; 
    $images = [];
    if ($request->hasFile('images')) {
    $files = $request->file('images');
    foreach($files as $file){
    $filename = $file->getClientOriginalName();
    $extension = $file->getClientOriginalExtension();
    $picture = date('His').$filename;
    $destinationPath = base_path() . '\public\images/';
    $file->move($destinationPath, $picture);
    $images[]=$picture;
    }
    }

    if (!empty($product['images'])) {
    $product['images'] = $images[0];
    $product['images2'] = $images[1];
    $product['images3'] = $images[2];
    $product['images4'] = $images[3];
    } else {
    unset($product['images']);
    }

    $product->update($update);
    return redirect('product');
}

如果不够清楚,您可以在codeshare.io上看到完整的ProductController

更新表格为codeshare.io 如您所见,我使用数组将图像插入数据库,并且数组已在$product['images4'] = $images[3];上定义

这是放置图片的地方。 This is where the picture was placed.

但它给了我错误:

ErrorException in ProductController.php line 149: Undefined offset: 0

您能否提出更好的代码或向我解释错误?非常感谢 ;) 祝你有愉快的一天。

2 个答案:

答案 0 :(得分:3)

当您尝试访问未上传的图片的索引时,会出现未定义的偏移量

  

要解决此问题,您应该像这样修改代码 -

public function update(Request $request, $id)
{
    $update = $request->all();
    $product = Product::find($id);

    $picture = ''; 
    $images = [];
    if ($request->hasFile('images')) {
      $files = $request->file('images');
      foreach($files as $file){
        if (isset($file)){
          $filename = $file->getClientOriginalName();
          $extension = $file->getClientOriginalExtension();
          $picture = date('His').$filename;
          $destinationPath = base_path() . '\public\images/';
          $file->move($destinationPath, $picture);
          array_push($images, $picture);
        }
      }
    }

    if (!empty($product['images']) && isset($images[0])) {
      $update['images'] = $images[0];
    } 
    if (!empty($product['images2']) && isset($images[1])) {
      $update['images2'] = $images[1];
    } 
    if (!empty($product['images3']) && isset($images[2])) {
      $update['images3'] = $images[2];
    }
    if (!empty($product['images4']) && isset($images[3])) {
      $update['images4'] = $images[3];
    } 
    unset($update['images']);
    $product->update($update);
    return redirect('product');
}

答案 1 :(得分:0)

在foreach关闭后使用print_r($image); exit;并使用kay和value检查数组并安排它