如果我的所有输入值都$request->input('users')
如何合并新值?
像这样:
$request->merge(['users.dob' => '2000']);
但显而易见是行不通的。
首先,我们需要获取属于该数组的所有项目并暂时保存。
例如
$users = $request->users;
这样,您可以访问用户的数据,例如 $users['name']
或 $users['surname']
.
接下来,更新或添加您需要的任何数据。例如,像这样:
$users['dob'] = "2000";
$users['name'] = ucwords($request->users['name']);
...
完成后,我们将临时数组合并回$request
,如下所示:
$request->merge(['users' => $users]);
试试这个:
$originalInput = $request->input('users');
$defaultValue = [
'dob' => 2000
];
$mergedResult = array_merge($defaultValue, $originalInput);
$request->merge([
'users' => $mergedResult
]);
如果您正在寻找更优雅的东西(阅读:困难的方式(并提高代码的可重用性,您可以按照以下步骤操作:
- 创建一个服务提供程序,这里我们注册一个宏来
Request
对象。
php artisan make:provider RegisterMergeInputRequestMacro
- 写下您的提供商
<?php
namespace AppProviders;
use IlluminateHttpRequest;
use IlluminateSupportServiceProvider;
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))
]);
});
}
}
- 在
config/app.php
文件中注册ServiceProvider
:
return [
...
'providers' => [
...
AppProvidersRegisterMergeInputRequestMacro::class,
...
],
...
];
- 像老板一样使用它:
$request->mergeInput('users', [
'dob' => 2000
]);
试试这个:
$request->request->add(['users.dob', '2000']);
似乎merge()
不再起作用了。
试试这个:
$data= $request->input('users');
$data['dob'] = 2000;
试试这个
public function __construct(IlluminateHttpRequest $request)
{
$request->request->add(
['date_of_birth' => implode('-',$request->only('year', 'month', 'day'))]);
}
试试这个:
$request->request->add([
'new-field1' => 'value 1',
'new-field2' => 'value 2'
]);
迄今为止得出的最佳解决方案。假设您要从请求修改cover_image名称。
将所有表单请求存储在变量中
$requestData = $request->all();
像这样修改数组
$requestData->cover_image = "your new image name";
保存您的数据
$requestData->save();
如果你把它做成一个数组,它就会起作用。
$request->merge([
'users' => [
'dob' => '2000'
],
]);