Request :: createFromGlobals()与$ this-> getRequest()

时间:2014-06-23 20:16:55

标签: symfony

我已经看到了两种在控制器中获取Request对象的方法:

$request = Request::createFromGlobals();

$request = $this->getRequest();

我想知道区别是什么。有一种方式比另一方好吗?

2 个答案:

答案 0 :(得分:5)

还有更多方法可以注入Request obj。

$ request = Request :: createFromGlobals();方法初始化一个新的Request Obj。

这已经由框架为您完成。在你的FrontController(app.php | app_dev.php)中,Request Obj被初始化并被handle方法注入到DependencyInjection容器中。

...
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
...

因此,使用DependencyInjection组件获取请求是一种更好的方法: http://symfony.com/doc/current/components/dependency_injection/introduction.html

$this->getRequest();

该函数使用Container来获取当前请求:

public function getRequest()
{
    return $this->container->get('request_stack')->getCurrentRequest();
}

更好的方法是将请求注入您的控制器操作 http://symfony.com/doc/2.5/book/controller.html#book-controller-request-argument

class FooController extends Controller
{
    public function fooAction(Request $request)
    {
        $request->...
    }
}

答案 1 :(得分:0)

如果您想编写单元测试,请使用$this->getRequest()。否则在PHP的上下文中没有特定的偏好。