Laravel有一种方法可以为请求数组添加值

Vij*_*ath 63 php laravel

我在Laravel中遇到一种情况,同时使用Request参数调用store()或update()方法,以便在调用Eloquent函数之前为请求添加一些额外的值.

function store(Request $request) 
{
  // some additional logic or checking
  User::create($request->all());
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*nin 120

通常,您不希望向Request对象添加任何内容,最好使用collection和put()helper:

function store(Request $request) 
{
    // some additional logic or checking
    User::create(array_merge($request->all(), ['index' => 'value']));
}
Run Code Online (Sandbox Code Playgroud)

或者你可以联合数组:

User::create($request->all() + ['index' => 'value']);
Run Code Online (Sandbox Code Playgroud)

但是,如果您真的想要向Request对象添加内容,请执行以下操作:

$request->request->add(['variable' => 'value']); //add request
Run Code Online (Sandbox Code Playgroud)

  • 在 Laravel 9 中不起作用: $request->request->add(['variable' => 'value']); 这有效: $request->merge(["key"=>"value"]); (4认同)
  • 是的它现在对我有用我已将代码更改为函数存储(Request $ request){//一些额外的逻辑或检查$ plan = 123; //决定用户计划的一些逻辑$ request-> request-> add(['plan'=> $ plan]); 用户::创建($请求 - >所有()); } (3认同)
  • Laravel 9 升级指南中也没有这个内容 (3认同)

mus*_*lla 39

参考Alexey Mezenin答案:

在使用他的答案时,我不得不直接向Request Object添加内容并使用:

$request->request->add(['variable', 'value']);
Run Code Online (Sandbox Code Playgroud)

使用它,它添加了两个变量:

$request[0] = 'variable', $request[1] = 'value'
Run Code Online (Sandbox Code Playgroud)

如果你是像我这样的新手,你需要一个关联数组,正确的方法是

$request->request->add(['variable' => 'value']);
Run Code Online (Sandbox Code Playgroud)

希望我节省了你的时间

PS:谢谢@Alexey,你真的帮我解答了你的答案


Fer*_*ÇER 24

我试过$request->merge($array)Laravel 5.2中的功能,它运行得很好.

例:

$request->merge(["key"=>"value"]);
Run Code Online (Sandbox Code Playgroud)

  • 这应该被标记为有效答案。在 Laravel 9 中有效。这在 Laravel 9 中不再有效: $request->request->add(['variable' => 'value']); (11认同)
  • 这是完美的解决方案 (4认同)
  • 是的@JohnSmith 是对的。我对 $request->request->add(['variable' => 'value']); 有同样的问题 在 Laravel 9 中。我不知道为什么他们在升级文档中没有提到这一点。 (2认同)

Wii*_*zco 14

在laravel 5.6中,我们可以在中间件之间传递参数,例如:

FirstMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    return $next($request->merge(['key' => 'value']));
}
Run Code Online (Sandbox Code Playgroud)

SecondMiddleware

public function handle($request, Closure $next, ...$params)
{
    //some code
    dd($request->all());
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*aza 13

只需使用这个:-

$request->merge(['index' => 'value']);
Run Code Online (Sandbox Code Playgroud)

为我工作

这将向具有给定索引的请求对象添加一个新值,并且可以在您的函数中或在将所有请求数据保存到数据库时使用它。


小智 9

您也可以使用以下代码

$request->request->set(key, value).

适合我.


gec*_*cko 9

根据我的观察

$request->request->add(['variable' => 'value']);将(大部分)在POST、PUT 和 DELETE方法中工作,因为传递了值,其中之一是_token. 就像下面的例子。

<form action="{{ route('process', $id) }}" method="POST">
    @csrf
</form>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}
Run Code Online (Sandbox Code Playgroud)

但是[下面的代码]将不起作用,因为没有传递任何值,它并没有真正添加。

<a href='{{ route('process', $id) }}'>PROCESS</a>

public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}
Run Code Online (Sandbox Code Playgroud)


使用GET方法时,您可以声明Request并直接为其赋值。就像下面这样:

public function process($id){
    $request = new Request(['id' => $id]);
}
Run Code Online (Sandbox Code Playgroud)

或者你可以使用merge. 这实际上比$request->request->add(['variable' => 'value']);可以初始化添加适用于所有方法(GETPOSTPUTDELETE)的请求值要好。

public function process(Request $request, $id){
    $request->merge(['id' => $id]);
}
Run Code Online (Sandbox Code Playgroud)

标签: laravel5.8.11


fay*_*ayz 7

在这个问题上已经足够说了,但是我无法拒绝添加自己的答案。我认为最简单的方法是

request()->merge([ 'foo' => 'bar' ]);
Run Code Online (Sandbox Code Playgroud)


fat*_*ghi 5

你可以使用 laravel helper 和request() 魔术方法...

request()->request->add(['variable1'=>'value1','variable2'=>'value2']);
Run Code Online (Sandbox Code Playgroud)

如果您使用api路由或在控制台命令中使用,您可以使用查询 而不是请求,如下所示:

 request()->query->add(['variable1'=>'value1','variable2'=>'value2']);
Run Code Online (Sandbox Code Playgroud)