在控制器 Symfony 中省略参数

Omit Argument in Controller 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 书中我可以阅读:

Not all routing parameters need to be arguments on your controller

If, for example, the lastName weren't important for your controller, you could omit it entirely:

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

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

的路线

如果您访问

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

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

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

该参数在您的控制器中是可选的,而不是在您的路线中。然后如果你想要/route,你必须创建一个新的route。

例如

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

您可以使用

检查您的路线
php app/console router:debug

您可以阅读所有路线

为了让您的路由从您的控制器命中 indexAction,您需要为 lastName 指定一个默认值:

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