【问题标题】:Omit Argument in Controller Symfony在控制器 Symfony 中省略参数
【发布时间】:2015-02-25 22:26:39
【问题描述】:

我正在学习 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 书中我可以阅读:

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

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

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

【问题讨论】:

    标签: php symfony


    【解决方案1】:

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

    如果您访问

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

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

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

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

    例如

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

    你可以用

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

    您可以阅读所有路线

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-11
        • 1970-01-01
        • 2013-02-10
        • 1970-01-01
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多