合并Laravel数组请求的新值

时间:2016-05-10 06:55:15

标签: php laravel laravel-5

如果我在$request->input('users')上拥有所有输入值,我该如何合并新的输入值?

这样的事情:

$request->merge(['users.dob' => '2000']);

但显然不起作用。

7 个答案:

答案 0 :(得分:1)

首先,我们需要获取属于该数组的所有项目并暂时保存。

例如,

$users = $request->users;

这样,您就可以访问用户的数据,例如$users['name']$users['surname']

接下来,更新或添加您需要的任何数据。例如,像这样:

$users['dob']  = "2000";
$users['name'] = ucwords($request->users['name']);
...

完成后,我们将临时数组合并回$request,如下所示:

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

答案 1 :(得分:0)

试试这个:

$data= $request->input('users');
$data['dob'] = 2000;

答案 2 :(得分:0)

试试这个:

$request->request->add(['users.dob', '2000']);

似乎merge()不再有用了。

答案 3 :(得分:0)

你可以尝试这个

public function __construct(\Illuminate\Http\Request $request)
{
    $request->request->add(
   ['date_of_birth' => implode('-',$request->only('year', 'month', 'day'))]);
 }

答案 4 :(得分:0)

尝试一下:

$request->request->add([
      'new-field1' => 'value 1', 
      'new-field2' => 'value 2'
    ]);

答案 5 :(得分:0)

尝试一下:

$originalInput = $request->input('users');
$defaultValue = [
    'dob' => 2000
];
$mergedResult = array_merge($defaultValue, $originalInput);
$request->merge([
    'users' => $mergedResult
]);

如果您正在寻找更优雅的方法(阅读:困难的方法)并提高代码的可重用性,则可以按照以下步骤操作:

  1. 创建一个服务提供商,在这里我们将一个宏注册到Request对象。
php artisan make:provider RegisterMergeInputRequestMacro
  1. 写您的提供商
<?php

namespace App\Providers;

use Illuminate\Http\Request;
use Illuminate\Support\ServiceProvider;

class RegisterMergeInputRequestMacro extends ServiceProvider
{
    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        Request::macro('mergeInput', function (string $name, array $defaultValue) {
            $this->merge([
                $name => array_merge($defaultValue, $this->input($name))
            ]);
        });
    }
}
  1. 在您的ServiceProvider文件中注册config/app.php
return [
    ...
    'providers' => [
      ...
      App\Providers\RegisterMergeInputRequestMacro::class,
      ...
    ],
    ...
];
  1. 像老板一样使用它:
$request->mergeInput('users', [
    'dob' => 2000
]);

答案 6 :(得分:0)

这是到目前为止我提出的最好的解决方案。 假设您要根据请求修改cover_image名称。

  1. 将所有表单请求存储在变量中

    $ requestData = $ request-> all();

  2. 像这样修改数组

    $ requestData-> cover_image =“您的新图像名称”;

  3. 保存您的数据

    $ requestData-> save();