也许是因为我累了,但我似乎无法为我的一个模特进行简单的上传工作。
在我的客户(非用户)模型的显示详细信息页面上,我有一个简单的表单,用户可以上传客户的徽标。
表格:
<form enctype="multipart/form-data" action="/customers/i/{{$customer->url_string}}" method="POST">
<input type="file" name="logoUpload">
<input type="hidden" name="_token" value="{{csrf_token()}}">
<input type="submit" class="pull-right btn btn-sm btn-primary" value="Upload">
</form>
控制器:
public function logoUpload(Request $request){
if($request->hasFile('logoUpload')){
$path = Storage::putFile('public/customer/uploads', new File(request('logoUpload')));
$customer->car_logo = $path;
$customer->save();
return back();
}
}
我知道问题是我没有在控制器中定义$ customer,因为在我单击提交后文件确实将自己存储在正确的文件夹中,但它根本没有命中数据库。
当前客户详细信息网址:
http://localhost:8000/customers/i/dsdado9a98w78721
邮政路线的网络定义:
Route::post('/customers/i/{customer}', 'CustomerController@logoUpload');
答案 0 :(得分:1)
您必须在表单中创建一个包含客户ID的隐藏字段,然后在控制器中使用它来使用新文件路径更新它,这是一个示例:
查看强>
<form enctype="multipart/form-data" action="/customers/i/{{$customer->url_string}}" method="POST">
<input type="file" name="logoUpload">
<input type="hidden" name="_token" value="{{csrf_token()}}">
<!-- customer_id field -->
<input type="hidden" name="customer_id" value="{{$customer->id}}">
<input type="submit" class="pull-right btn btn-sm btn-primary" value="Upload">
</form>
<强>控制器强>
public function logoUpload(Request $request){
if($request->hasFile('logoUpload')){
$path = Storage::putFile('public/customer/uploads', new File(request('logoUpload')));
// get customer
$customer = Customer::find($request->customer_id);
$customer->car_logo = $path;
$customer->save();
return back();
}
}
答案 1 :(得分:0)
你有一些选择,这里是一个简单的选项,只调整控制器方法:
public function logoUpload(Request $request, $customer)
{
$customer = Customer::where('url_string', $customer)->firstOrFail();
if($request->hasFile('logoUpload')){
$path = Storage::putFile('public/customer/uploads', new File(request('logoUpload')));
$customer->car_logo = $path;
$customer->save();
return back();
}
...
}
我们在方法签名中添加了一个参数来接受route参数。然后,我们通过匹配该参数的url_string
找到模型。
您还可以设置路径模型绑定,以便根据路径参数解析该模型。