在Laravel中,有没有办法将值添加到请求数组中


In Laravel is there a way to add values to a request array?

我在Laravel中遇到这种情况,同时使用请求参数调用store((或update((方法以在调用Eloquent函数之前为请求添加一些额外的值,有什么办法。

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

通常,您不想向 Request 对象添加任何内容,最好使用集合和put()帮助程序:

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

或者你可以联合数组:

User::create($request->all() + ['index' => 'value']);

但是,如果您确实要向 Request 对象添加某些内容,请执行以下操作:

$request->request->add(['variable' => 'value']); //add request

我在 Laravel 5.2 中尝试$request->merge($array)功能,它运行良好。

例:

$request->merge(["key"=>"value"]);

参考Alexey Mezenin答案:

在使用他的答案时,我不得不直接向请求对象添加一些内容并使用:

$request->request->add(['variable', 'value']);

使用它添加两个变量:

$request[0] = 'variable', $request[1] = 'value'

如果您是像我这样的新手,并且需要一个关联数组,那么正确的方法是

$request->request->add(['variable' => 'value']);

希望我为您节省了一些时间

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

在这个

问题上说得足够多,但我忍不住添加了自己的答案。我相信最简单的方法是

request()->merge([ 'foo' => 'bar' ]);

你也可以使用以下代码

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

更适合我。

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

第一中间件

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

第二中间件

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

只需使用这个:-

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

为我工作

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

根据我的观察

$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]);
}

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

<a href='{{ route('process', $id) }}'>PROCESS</a>
public function process(Request $request, $id){
    $request->request->add(['id' => $id]);
}


使用 GET 方法时,您可以声明请求并直接在其上分配值。如下所示:
public function process($id){
    $request = new Request(['id' => $id]);
}

或者您可以使用 merge .这实际上比$request->request->add(['variable' => 'value']);更好,因为可以初始化添加适用于所有方法(GET,POST,PUT,DELETE(的请求值

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

标签: 拉拉维尔5.8.11

要为当前Request对象添加 ex: newParam的新参数,您可以执行以下操作:

$newParam = "paramvalue";
$request->request->add(['newParam' => $newParam]);

添加新参数后,您将能够通过以下方式看到此新添加到 Request 对象的参数:

dd($request);//prints the contents of the Request object

我用这段代码在我的请求中添加了一些东西。

$req->query->add(['key'=>'variable']);
$req->request->add(['key'=>'variable']);

你可以使用Laravel助手和request((魔术方法...

request()->request->add(['variable1'=>'value1','variable2'=>'value2']);

如果你使用的是 API 路由或使用在控制台命令中,你可以使用查询而不是像这样请求

 request()->query->add(['variable1'=>'value1','variable2'=>'value2']);

我使用和研究过的最好的是$request->merge([])(检查我的代码段(:

public function index(Request $request) {
    not_permissions_redirect(have_premission(2));
    $filters = (!empty($request->all())) ? true : false;
    $request->merge(['type' => 'admin']);
    $users = $this->service->getAllUsers($request->all());
    $roles = $this->roles->getAllAdminRoles();
    return view('users.list', compact(['users', 'roles', 'filters']));
}

检查索引函数内的第 # 3 行。

您可以使用

$request['key'] = 'value' 直接访问请求数组;

您可以通过执行以下操作将参数添加到来自中间件的请求中:

public function handle($request, Closure $next)
{
    $request->route()->setParameter('foo', 'bar');
    return $next($request);
}

如果要向 Request 对象添加一个可以通过调用获得的查询参数

$request->get('key') 

$request->all()

以下内容对我来说效果很好。

$request->query->set('key','value');
RawPlot::create($req->all() + ['user_id'=>$user_id]);

这是将新变量合并到请求中的简单方法。

您也可以

在较新的Laravel版本上执行$request['key'] = 'value';