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

时间:2016-09-01 15:04:52

标签: php laravel laravel-5

我想更新用户图片但是没有更新。我使用了以下控制器来更新图像..你能说出控制器功能的错误吗?

查看部分:

<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');
}

3 个答案:

答案 0 :(得分:0)

您是否检查了'images'目录中的文件权限?它需要具有上传文件的写权限。

答案 1 :(得分:0)

问题是这个,

$data->image = $name;

您可以设置值,但不能将其保存在任何位置。您必须添加保存行。

$data->save();

请注意,调用update()只会将您传入的内容保存为参数,并不会保存您通过mutator设置的内容。

答案 2 :(得分:0)

请参阅问题的错误/解决方案首先我需要存储更新值,然后保存新图像。所以我在控制器上做了一些改动并解决了它。

这是控制器代码:

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');
}