我已经看到请求对象作为参数传递给控制器操作方法:
public function addAddressAction(Request $request)
{
...
}
我也在动作方法中看到它从容器中获取:
public function addAddressAction()
{
$request = $this->getRequest();
...
}
哪一个更好?这有关系吗?
答案 0 :(得分:43)
如果您深入了解the Symfony2 Base Controller code,您可能会注意到getRequest()
自版本2.4以来已被标记为已弃用,并将在3.0中删除。
/*
* ...
* @deprecated Deprecated since version 2.4, to be removed in 3.0. Ask
* Symfony to inject the Request object into your controller
* method instead by type hinting it in the method's signature.
*/
public function getRequest()
{
return $this->container->get('request_stack')->getCurrentRequest();
}
由以下演变引入,
并here's upgrade from 2.x to 3.0 documentation。
<强>结论强>
您的请求应该是您行动签名的一部分。
答案 1 :(得分:11)
据我所知,没有区别。无论如何,它都不会影响中断。即使您想在操作中指定所需的参数。 E.g。
/**
* @Route("/edit/{id}", name="edit")
*/
public function editAction(Request $request, $id)
{
// Both $request and $id are available
}