现有图像未以编辑形式显示以在larvel(5.8)中更新

时间:2019-06-17 08:28:29

标签: php image laravel-5 upload

我正在尝试创建待办事项列表,其中显示了其他字段值的更新,但是对于图像,该值是从文件夹中读取的,但不会显示在输入字段中。

一切正常,否则会出现此问题。

这将显示图像名称<?php echo $task->img; ?>

我使用dd("$task->img");来检查值。

edit.blade.php

        <label for="title">Task Title</label>
        <input type="text" value="{{$task->title}}" class="form-control" id="taskTitle"  name="title" >
      </div>
      <div class="form-group col-6">
        <label for="description">Task Description</label>
        <input type="text" value="{{$task->description}}" class="form-control" id="taskDescription" name="description" >
      </div>
 <div class="form-group col-6">
        <label for="img">Task Image</label>
        <input type="file" value="{!! $task->img !!}" class="form-control" id="taskImg" name="img" >
      </div>

taskcontroller.php

 public function update(Request $request, Task $task)
    {

        // dd("$task");
        //Validate
        $request->validate([
            'title' => 'required|min:3',
            'description' => 'required',
            'img' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',

        ]);

        $task->title = $request->title;
        $task->description = $request->description;

        if($request->hasFile('img')) {
            $file = $request->file('img');
            $newVar = strtotime(date('d-m-Y h:i:s'));
            $extension = $file->getClientOriginalExtension(); // getting image extension
            $filename = $newVar.'.'.$extension;
            $file->move('task',$filename);
            $task->img = $filename;
        }


        $task->update();
        $request->session()->flash('message', 'Successfully modified the task!');
       return redirect()->route('tasks.index');
    }```

1 个答案:

答案 0 :(得分:0)

将文件添加为默认值不适用于输入字段。 您可能想要在输入字段上方添加一个额外的div,例如:

<div>
<p>Current image</p>
<img src="{!! asset($task->img) !!}">
<p>Upload new image:</p>
 <div class="form-group col-6">
        <label for="img">Task Image</label>
        <input type="file" class="form-control" id="taskImg" name="img" >
      </div>
</div>

在控制器中,如果已上传新图像,则应删除旧图像。我还添加了asset()助手。但是您应该使用文件的位置,因为在控制器中您似乎没有将其存储在文件系统磁盘上。

PS:您还应该阅读以下内容以简化上传代码:

https://laravel.com/docs/5.8/filesystem#storing-files 例如,这将替换if语句之间的所有这些行

$path = $request->file('img')->store('images');
$task->img = $path;