【问题标题】:Symfony2 routing all url to same controllerSymfony2 将所有 url 路由到同一个控制器
【发布时间】:2015-02-27 09:50:17
【问题描述】:

我有一个应用程序,我想从我的 routing.yml(不是 .htaccess)重定向所有路由到同一路径:

home:
    path: /
    defaults: { _controller: MyBundle:Default:index }

如果用户输入//section 甚至/sajdfñldasf 总是会重定向到主路径。

是否可以使用 Symfony2 和 routing.yml 做到这一点?

【问题讨论】:

    标签: php symfony routing


    【解决方案1】:

    您需要定义可以处理任何值的参数:

    home:
        path:     /{path}
        defaults: { _controller: MyBundle:Default:index, path: "" }
        requirements:
            path: .*
    

    【讨论】:

    • 赞成为路径设置默认值。如果用户点击 /somthing/another/another 怎么办?
    • 那么path请求的参数将具有值/somthing/another/another
    • 我明白了,因为path: .*
    【解决方案2】:

    是的

    回家

    home:
        path:     /
        defaults: { _controller: MyBundle:Default:index }
    

    部分

    section:
        path:     /section
        defaults: { _controller: MyBundle:Default:index }
    

    随便

    whatever:
        path:     /whatever
        defaults: { _controller: MyBundle:Default:index }
    

    【讨论】:

    • 是的,但不写所有的路线,我希望用户写他想要的任何东西,然后直接进入家庭。
    • 所以您必须在控制器中编写该逻辑
    • 但是如果用户输入 '/' 或 /section/ 或 'whatever/ 可以正常工作,但如果用户输入例如 '/test' 将无法正常工作
    • 路径:/{section} 和默认值相同,一切正常 :)
    • 还有一个解决方案:您想创建一个侦听器来侦听 kernel.request 事件(此处的文档)。在该侦听器中,您可以访问请求和容器,因此您可以做任何您喜欢的事情。在 kernel.request 期间 Symfony 给你一个 GetResponseEvent。您可以在此事件上设置 Response 对象,就像在控制器中返回响应一样。如果您确实设置了响应,Symfony 将返回它,而不是通过正常的请求 --> 控制器 --> 响应周期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-16
    • 1970-01-01
    • 2013-06-12
    • 2015-09-10
    相关资源
    最近更新 更多