Php Symfony2-使用多个参数从控制器参数列表访问请求对象

Php Symfony2-使用多个参数从控制器参数列表访问请求对象,php,symfony,controller,Php,Symfony,Controller,我使用的是Symfony 2.4,根据文档,在控制器中检索请求对象的正确方法如下: /** * @Route("/register/next", name="next_registration_step") */ public function nextAction(Request $request = null) {...} 这正如预期的那样有效。但是,如果我向控制器添加参数,$request在运行时变为null: /** * @Route("/register/next/{curre

我使用的是Symfony 2.4,根据文档,在控制器中检索请求对象的正确方法如下:

/**
 * @Route("/register/next", name="next_registration_step")
 */
public function nextAction(Request $request = null) {...}
这正如预期的那样有效。但是,如果我向控制器添加参数,$request在运行时变为null:

/**
 * @Route("/register/next/{currentStep}", name="next_registration_step")
 */
public function nextAction(Request $request = null, $currentStep = 0) {...}
如何在不使用任何旧的但不推荐使用的方法获取请求的情况下解决此问题

注意:如果可能的话,一个不涉及最近引入Symfony 2.4的请求堆栈的解决方案将是非常好的,因为它看起来有点过头了。

这很有效

因为我认为唯一的区别是我在参数声明中没有传递
=null

use Symfony\Component\HttpFoundation\Request;

/**
 * @Route("/hello/{name}", name="_demo_hello")
 */
public function helloAction(Request $request, $name)
{
    var_dump($request, $name);die();
在Symfony2控制器中,在方法定义中声明默认值不是一个好主意-应该在路由定义中进行

就你而言:

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

在这方面,

省略默认值确实解决了问题。谢谢未来读者注意:如文档中所述,使用可选参数没有问题:但是,将参数设置为可选是完全可以的。我想用一个简单的词来称呼它——bug?我在一个版本的Symfony中遇到了与FOSUserBundle相同的问题。也许你应该尝试升级你的版本