我尝试用里面的多个图片更新表格字段。创建形式它工作正常,但问题是当我尝试更新它时。
所以这里是更新功能的控制器:
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];
上定义
但它给了我错误:
ErrorException in ProductController.php line 149: Undefined offset: 0
您能否提出更好的代码或向我解释错误?非常感谢 ;) 祝你有愉快的一天。
答案 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检查数组并安排它