2

I am using Symfony 2.4, and according to the Docs, the correct way of retrieving the Request object in the controller is the following:

/**
 * @Route("/register/next", name="next_registration_step")
 */
public function nextAction(Request $request = null) {...}

This works as expected. However, if I add a parameter to the controller, $request becomes null at runtime:

/**
 * @Route("/register/next/{currentStep}", name="next_registration_step")
 */
public function nextAction(Request $request = null, $currentStep = 0) {...}

How do I work around this issue without using any older-but-deprecated methods for getting the request?

Note: if possible, a solution that does not involve the Request Stack recently introduced to Symfony 2.4 would be great, as it seems like overkill.

1 Answer 1

2

This works,

as I think the only difference is that I do not pass = null in parameters declaration

use Symfony\Component\HttpFoundation\Request;

/**
 * @Route("/hello/{name}", name="_demo_hello")
 */
public function helloAction(Request $request, $name)
{
    var_dump($request, $name);die();

In Symfony2 controllers it's not a good Idea to declare default value in the method definition - it should be done in routing definition.

In your case:

 /*
 *
 * @Route("/register/next/{currentStep}", name="next_registration_step", defaults={"currentStep" = 0})
 */
public function next(Request $request, $currentStep) {...}

regards,

Sign up to request clarification or add additional context in comments.

3 Comments

Omitting the default value indeed solves the problem. Thanks!
Note to future readers: as noted in the documentation, there is no problem with using optional parameters: Making the argument optional, however, is perfectly ok. (quoted from the documentation).
I'd like to call it by one simple word - bug? I had the same problem with FOSUserBundle with one version of Symfony. Maybe you should try to upgrade your version

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.