如何在laravel中使用控制器更新图像


How to update image using controller in laravel?

我想更新用户图像,但它没有得到更新。我使用以下控制器更新图像..你能指出控制器功能上的错误吗?

查看部分:

<div class="form-group">
            <label>Image Upload</label>
            <input type="file" name="image"  id="image"><img src="{{ asset('public/images/' . $course->image) }}" width="200px"/></br>
 </div> 

控制器功能:

public function update(Request $request, $id)
{
    $data=Course::findOrFail($id);  

    if ($request->hasFile('image'))
        {
            $file = $request->file('image');
            $timestamp = str_replace([' ', ':'], '-', Carbon::now()->toDateTimeString()); 
            $name = $timestamp. '-' .$file->getClientOriginalName();
            $data->image = $name;
            $file->move(public_path().'/images/', $name);                       
        }   
             $data->course_code = $request['course_code'];
             $data->course_title = $request['course_title'];
             $data->course_credit = $request['course_credit'];
          $data->save();             
      return redirect('course');
}

是否检查了"images"目录的文件权限?上传文件需要有写权限。

问题是,

$data->image = $name;

您设置了值,但不将其保存在任何地方。你必须添加一个保存行。

$data->save();

注意,调用update()只保存作为参数传入的内容,而不保存通过mutator设置的内容。

查看问题的错误/解决方案是首先我需要存储更新值,然后保存新图像。所以我在控制器上做了一些改变,解决了这个问题。

控制器代码:

public function update(Request $request, $id)
{
    $data=Course::findOrFail($id);  
     $data->update($request->all());
    if ($request->hasFile('image'))
    {
            $file = $request->file('image');
            $timestamp = str_replace([' ', ':'], '-', Carbon::now()->toDateTimeString()); 
            $name = $timestamp. '-' .$file->getClientOriginalName();
            $data->image = $name;
            $file->move(public_path().'/images/', $name);   
            $data->save();                  
        }   
    return redirect('course');
}