【问题标题】:Laravel Request File ChangeLaravel 请求文件更改
【发布时间】:2016-07-03 06:36:42
【问题描述】:

当我使用密钥“siup”上传文件时,请求 Laravel 出现问题,请求数据显示如下:

"_token" => "Ab9zfuQn0rb0exCx7IdMcnAxQWi4iqWcfcDy319B"
"_method" => "PUT"
"first_name" => "first"
"last_name" => "aaa"
"email" => "black.y_+ta@email.com"
"province" => "11"
"city_id" => "38"
"address" => "asdasd"
"phone" => "1234567890"
"company_type" => "koperasi"
"company_name" => "qqq"
"company_address" => "qqq"
"pic" => "qqqa"
"position" => "qqq"
"siup" => UploadedFile {#30 ▶}

我想对请求响应这样做

$request->merge(['siup'=>$myVar]);

但关键 siup 没有改变。我想通过 laravel eloquent update 更改 siup 值以将其插入数据库。

【问题讨论】:

    标签: php laravel request


    【解决方案1】:

    Request 对象公开的请求数据来自两个不同的来源:查询数据和文件。当您转储请求数据的内容时,它会将这两个源合并在一起,这就是您的输出。

    当你使用merge()replace()等方法时,它只是在操作查询数据。因此,即使您尝试覆盖siup 数据,实际上您只是更改查询数据中的siup 键。文件数据中的siup 键没有被触及。当您再次转储请求数据的内容时,siup 文件数据将覆盖您的 siup 查询数据。

    如果您只是将数据作为数组获取,然后根据需要使用该数组,您将为自己省去很多麻烦。这比尝试操作 Request 对象更安全、更容易,而且可能更符合您应该做的事情。

    类似:

    $data = $request->except('siup');
    $data['siup'] = $myVar;
    
    // now use your data array
    MyModel::create($data);
    

    【讨论】:

    • 所以我不能删除我的请求变量上的 siup 键?
    • @patricus 谢谢!我花了该死的几个小时试图弄清楚为什么我上传的文件上的替换不起作用,现在我正在做一件肮脏的事情,用 $request->files->replace(array('file1'->file1 )),但它的工作原理! (在我的情况下,每次都是一个文件上传)
    • 不知何故 $this->validate($request, $rules) 再次对文件部分有一个未更改的 $request ...
    猜你喜欢
    • 1970-01-01
    • 2015-04-20
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 2018-06-23
    • 2020-06-11
    相关资源
    最近更新 更多