What is the best way to get the 'Request' object in the controller?

symfony

Solution

If you take a deeper look at the Symfony2 Base Controller code, you may notice that `getRequest()` is marked as deprecated since version 2.4 and will be removed in 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();
}

Introduced by the following evolution,

- [FrameworkBundle] use the new request_stack service to get the Request object in the base Controller class.

And, here's the upgrade from 2.x to 3.0 documentation.

- Upgrade from 2.x to 3.0 - FrameworkBundle

Conclusion,

Your Request should then be part of your action's signature.

Problem

I have seen the request object being passed to the controller action method as a parameter like this: ``` public function addAddressAction(Request $request) { ... } ``` I have also seen it within the action method where it is gotten from the container: ``` public function addAddressAction() { $request = $this->getRequest(); ... } ``` Which one is better? Does it matter?

Original source