在 Laravel,是否有办法为请求数组添加值?

我在 Laravel 遇到过这样一种情况,当我使用 Request 参数调用 store ()或 update ()方法,以便在调用雄辩函数之前为请求添加一些额外的值。

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

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

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

关于 Alexey Mezenin的答案:

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

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

通过这种方法,它增加了两个变量:

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

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

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

希望我节省了你的时间

附注: 谢谢你 @Alexey,你的回答真的帮了我大忙

要向当前 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 5.6中,我们可以在 Middlewares 之间传递参数,例如:

第一中间件

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->request->set(key, value).

更适合我。

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

我在 Laravel 5.2中尝试了 $request->merge($array)函数,它工作得很好。

例如:

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

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

关于这个问题我已经说得够多了,但我还是忍不住要加上我自己的答案。我认为最简单的方法是

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

根据我的观察 :

$request->request->add(['variable' => 'value']);将(大多数情况下)在 发布,放入和删除方法中工作,因为有值传递,其中之一就是 _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]);
}


使用 走开方法时,您可以声明 请求并直接为其赋值,如下所示:

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

或者你可以使用 merge。这实际上比 $request->request->add(['variable' => 'value']);要好,因为 初始化可以请求适用于所有方法(走开职位删除)的值

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

标签: laravel5.8.11

我使用和研究过的最好的一个是 $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']));
}

检查 index 函数中的第3行。

您可以通过以下方法向来自中间件的请求添加参数:

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

您可以使用 laravel 助手和 request ()魔法方法..。

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

如果要向 Request 对象添加查询参数,可以通过调用

$request->get('key')

或者

$request->all()

下面的方法对我很有效。

$request->query->set('key','value');

简单地使用:-

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

为我工作

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

RawPlot::create($req->all() + ['user_id'=>$user_id]);

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