我在一个控制器中处理数据,并希望将其进一步传递到另一个控制器中以避免重复代码。
是否有办法设置另一个控制器的store
-方法中所需的Request对象?我已经追踪了Request继承,并找到了Symfony的Request对象,该对象具有request
属性,实际上是ParameterBag
,该属性包含add
方法,用于向其添加带值的参数。
我尝试了以下方法,但得到的结果是null
:
$myRequest = new Request();
$myRequest->request->add(['foo' => 'bar']);
var_dump($myRequest->foo);
我在用Laravel 5.1做这个项目。
6条答案
按热度按时间ctehm74n1#
您可以使用
replace()
:或者,为第二个控制器中正在进行的任何操作创建一个
Job
,并删除ShouldQueue
接口以使其同步运行,这样做会更有意义。ecfsfe2w2#
使用
$myRequest = new Request();
创建请求对象将创建method = 'GET'
对象。您可以使用$myRequest->getMethod()
检查请求的方法。由于request
属性保存POST请求的数据,因此默认情况下无法使用$myRequest->request->add()
。首先,您必须将请求的方法设置为POST:顺便说一下,使用
$myRequest->query->add()
可以向GET请求添加数据。2ul0zpep3#
为了“避免重复代码”,您需要将公共功能抽象到一个专用类中,给予它一个适当的助记名,围绕它编写一组单元测试,然后在单元测试控制器时在控制器中模拟它。
但如果您仍需要提出请求:
如果您需要请求的全部功能,则需要添加一些额外的行
hwazgwia4#
您可以克隆现有请求并使用新数据填充它:
ajsxfq5m5#
您可以使用这些方法动态地添加请求参数。
更换
替换函数文档
如果您在控制器中,则在函数的参数中传递Request对象,如
合并函数
合并函数文档
添加函数
注:在所有函数中我们都在扩展请求,这意味着以前的参数将保留在那里。您将添加自己的参数。您可以替换所有参数。
a5g8bdjr6#
你必须改变
这个
到