我在laravel应用程序中编辑了刀片文件。在此编辑表单中,将保存到车辆和上传的两个表中的数据更新。我在编辑刀片文件更新图像以上传表中有以下代码,
@foreach( $vehicles-> uploads as $upload)
<img id="preview"
src="{{asset((isset($upload) && $upload->resized_name!='')?'images/'.$upload->resized_name:'images/noimage.png')}}"
height="200px" width="200px"/>
<input class="form-control" style="display:none" name="files[]" type="file" id="files" name="_token" value="{{ csrf_token() }}" enctype="multipart/form-data">
<br/>
<a href="javascript:changeProfile();">Add Image</a> |
<a class="button is-outlined" href="/myads/{{$upload->id}}/delete" onclick="return confirm('Are you sure to want to delete this record?')" >Delete</a></td>
<hr>
@endforeach
@endif
更新控制器是
$photos = $request->file('files');
if (!is_array($photos)) {
$photos = [$photos];
}
if (!is_dir($this->photos_path)) {
mkdir($this->photos_path, 0777);
}
for ($i = 0; $i < count($photos); $i++) {
$photo = $photos[$i];
$name = sha1(date('YmdHis') . str_random(30));
$save_name = $name . '.' . $photo->getClientOriginalExtension();
$resize_name = $name . str_random(2) . '.' . $photo->getClientOriginalExtension();
Image::make($photo)
->resize(250, null, function ($constraints) {
$constraints->aspectRatio();
})
->save($this->photos_path . '/' . $resize_name);
$photo->move($this->photos_path, $save_name);
$upload = Upload::find($id);
$upload->filename = $save_name;
$upload->resized_name = $resize_name;
$upload->original_name = basename($photo->getClientOriginalName());
$upload->vehicle_id = $vehicle->id;
$upload->save();
}
路线是
Route::post('myads/{id}', [
'uses' => '\App\Http\Controllers\VehicleController@update',
])->name('vehicles.edit');
但是当我附加图像并单击更新按钮时,它不是更新上传表中的图像。如何解决这个问题?
答案 0 :(得分:1)
我认为您在更新控制器中使用了错误的方法。
if (!is_array($photos)) {
$photos = [$photos];
}
请尝试使用此方法将字符串转换为数组。
if (!is_array($photos)) {
$photos = explode(' ', $photos);
}
答案 1 :(得分:0)
您的HTML代码错误。
请勿在{{1}}元素中使用style="display:none"
。如果它们被隐藏,浏览器将忽略它。
请勿将CSRF令牌与输入文件合并。
尝试一下:
input