Laravel - 上传到现有的模型记录

时间:2017-12-14 15:47:26

标签: laravel laravel-5 file-upload controller upload

也许是因为我累了,但我似乎无法为我的一个模特进行简单的上传工作。

在我的客户(非用户)模型的显示详细信息页面上,我有一个简单的表单,用户可以上传客户的徽标。

表格:

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

2 个答案:

答案 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找到模型。

您还可以设置路径模型绑定,以便根据路径参数解析该模型。