在Controller Symfony中省略参数

时间:2015-02-25 22:26:39

标签: php symfony

我正在学习symfony书,我读过我可以省略控制器中的参数(http://symfony.com/doc/2.3/book/controller.html#route-parameters-as-controller-arguments

我尝试过这种配置

我的路线

_demo:
  path:     /{lastName}
  defaults: { _controller: AcmeDemoBundle:Demo:index}

和我的控制器

public function indexAction(){
    return $this->render('AcmeDemoBundle:Demo:index.html.twig');
}

当我访问没有参数的路线(lastName)

http://localhost:8000/app_dev.php/

我收到此错误

No route found for "GET /"

但是在symfony书中我可以读到:

  

并非所有路由参数都需要是控制器上的参数

     

例如,如果lastName对您的控制器不重要,   你可以完全省略它:

我正在使用symfony 2.3 非常感谢!

2 个答案:

答案 0 :(得分:2)

现在您没有/的路线,但是路线的参数为/{param}

如果你访问

http://localhost:8000/app_dev.php/foo

你可以获得这条路线,你可以在控制器中省略参数

public function indexAction()
{
    return $this->render('AcmeDemoBundle:Demo:index.html.twig');
}

您的控制器中的参数是可选的,而不是您的路线。然后,如果您想要/路由,则必须创建新路由。

E.g

_demo2:
  path:     /
  defaults: { _controller: AcmeDemoBundle:Demo:index2}

您可以使用

查看路线
php app/console router:debug

您可以阅读所有路线

答案 1 :(得分:-1)

为了让你的路线从你的控制器点击indexAction,你需要指定lastName的默认值:

_demo:
      path:     /{lastName}
      defaults: { _controller: AcmeDemoBundle:Demo:index, lastName: null}