Symfony 获得';请求';控制器中的对象?

Symfony 获得';请求';控制器中的对象?,symfony,Symfony,我看到请求对象作为如下参数传递给控制器操作方法: public function addAddressAction(Request $request) { ... } 我也在action方法中看到了它,它是从容器中获取的: public function addAddressAction() { $request = $this->getRequest(); ... } 哪一个更好?这有关系吗?据我所知没有区别。这两种方式都不会产生太大影响。即使您希望在操作中

我看到请求对象作为如下参数传递给控制器操作方法:

public function addAddressAction(Request $request)
{
    ...
}
我也在action方法中看到了它,它是从容器中获取的:

public function addAddressAction()
{
    $request  = $this->getRequest();
    ...
}

哪一个更好?这有关系吗?据我所知没有区别。这两种方式都不会产生太大影响。即使您希望在操作中指定所需的参数。例如

/**
 * @Route("/edit/{id}", name="edit")
 */
public function editAction(Request $request, $id)
{
    // Both $request and $id are available
}

如果深入了解,您可能会注意到,
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();
}
通过以下演变介绍

还有,这个

结论,


然后,您的请求应该成为您的操作签名的一部分。

我感谢您的出色回答,事实上,从容器中获取请求被标记为已弃用。