我已经看到了两种在控制器中获取Request对象的方法:
$request = Request::createFromGlobals();
$request = $this->getRequest();
我想知道区别是什么。有一种方式比另一方好吗?
答案 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的上下文中没有特定的偏好。