Ben*_*Ben 32 php request laravel-5.1
我正在一个控制器中处理数据,并希望将其进一步传递到另一个控制器,以避免重复的代码.
有没有办法在另一个控制器的store
-method中设置一个需要的Request对象?我已经跟踪了Request继承并找到了Symfony的Request对象,该对象有一个request
属性,实际上是一个ParameterBag
包含add
向其中添加值的参数的方法.
我尝试过以下但是我得到null
了结果:
$myRequest = new Request();
$myRequest->request->add(['foo' => 'bar']);
var_dump($myRequest->foo);
Run Code Online (Sandbox Code Playgroud)
我在这个项目上使用Laravel 5.1.
Rwd*_*Rwd 46
你可以使用replace()
:
$request = new \Illuminate\Http\Request();
$request->replace(['foo' => 'bar']);
dd($request->foo);
Run Code Online (Sandbox Code Playgroud)
或者,Job
在第二个控制器中创建一个正在发生的任何内容并删除该ShouldQueue
接口以使其同步运行更有意义.
希望这可以帮助!
小智 23
创建请求对象与$myRequest = new Request();
创建与对象method = 'GET'
.您可以查看请求的方法$myRequest->getMethod()
.由于request
属性包含POST请求的数据,因此$myRequest->request->add()
默认情况下不能使用.首先,您必须将请求的方法设置为POST:
$myRequest = new \Illuminate\Http\Request();
$myRequest->setMethod('POST');
$myRequest->request->add(['foo' => 'bar']);
dd($request->foo);
Run Code Online (Sandbox Code Playgroud)
顺便使用,$myRequest->query->add()
您可以将数据添加到GET请求.
为了“避免重复代码”,您需要将通用功能抽象为专用类,为其指定适当的助记符名称,在其周围编写一组单元测试,然后在对控制器进行单元测试时在控制器中对其进行模拟。
但是,如果您仍然需要发出请求:
use Illuminate\Http\Request;
$request = new Request([
'name' => 'unit test',
'number' => 123,
]);
Run Code Online (Sandbox Code Playgroud)
如果您需要请求的全部功能,则需要添加一些额外的行
$request
->setContainer(app())
->setRedirector(app(\Illuminate\Routing\Redirector::class))
->validateResolved();
Run Code Online (Sandbox Code Playgroud)