PHP 联盟/路由后请求对象


PHP league/route post request object

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

我有一条邮政路线:

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

RouteCollection对象接受 league/container(依赖注入容器)的依赖关系。这是调用控制器时从中提取 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();