PHP联盟/路线发布请求对象

时间:2015-03-10 23:36:06

标签: php post request response router

我正在使用联盟/路线处理我的应用程序的路由。

我有一个邮寄路线:

$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以传递实际请求,以便我可以获取我的帖子数据,而无需创建自己的请求对象?

1 个答案:

答案 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();