Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

symfony

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?

like image 403
MikeGA Avatar asked Jan 08 '14 00:01

MikeGA


2 Answers

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,

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.

like image 107
Ahmed Siouani Avatar answered Nov 08 '22 02:11

Ahmed Siouani


As far as I know there's no difference. It doesn't interrupt affect much either way. Even if you want to specify required parameters in your action. E.g.

/**
 * @Route("/edit/{id}", name="edit")
 */
public function editAction(Request $request, $id)
{
    // Both $request and $id are available
}
like image 35
antony Avatar answered Nov 08 '22 02:11

antony