我正在使用联盟/路线处理我的应用程序的路由。
我有一个邮寄路线:
$router = new RouteCollection;
$router->post('/url', 'MyClass::myMethod');
...$dispatcher->dispatch(...)->send();
在我的方法中:
class MyClass {
public function myMethod(Request $request) {
var_dump($request->request);
}
}
转储传递的请求对象的Var只是HttpFoundation \ Request的一个新实例,而不是应用程序处理的实际请求,即没有发布数据。要获得发布数据,我需要这样做:
$request = Request::createFromGlobals();
在我的方法中。这使得传递给我的方法的请求对象无用。如何配置Route以传递实际请求,以便我可以获取我的帖子数据,而无需创建自己的请求对象?
答案 0 :(得分:3)
RouteCollection
对象接受联盟/容器的依赖项,即依赖注入容器。这是在调用控制器时从中拉出Request对象的位置。
按照设计,如果您想自己做任何特定的事情,请求对象不是为您构建的,因此,需要在容器中定义它或每次都返回一个空白请求。计划在路由器版本2中对此进行补救,因为我发布此版本的时间不会太长。
所以需要这样的东西。
<?php
$container = new League\Container\Container;
$container->add('Symfony\Component\HttpFoundation\Request', function () {
return Symfony\Component\HttpFoundation\Request::createFromGlobals();
});
$router = new League\Route\RouteCollection($container);
$router->post('/url', 'MyClass::myMethod');
// ...
$dispatcher->dispatch(/* ... */)->send();