【问题标题】:Doubts around Symfony2 Routing component usage对 Symfony2 路由组件使用的质疑
【发布时间】:2015-07-26 15:13:48
【问题描述】:

我正在设置 FOSRestBundle 并且有一些疑问,不知道是否与 Symfony2 Routing 组件有关或者可以通过任何其他方式完成。这里,

1) 在执行该方法之前,如何检查是否在请求标头上设置了X-PDONE-SESSION-ID?这可以使用路由上的注释来完成吗?关于如何检查的任何想法?

2) 我需要在路由@QueryParam(name="token", requirements="") 中使用这个正则表达式\b(?:(?:https?):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|] 作为requirements 来检查有效的URL,如何?

我已阅读 herehere,但完全没有帮助。

【问题讨论】:

    标签: php symfony fosrestbundle symfony-routing


    【解决方案1】:

    (1)可以使用the book article you referenced as not being helpful中描述的方法完成:

    如您所见,可以使路由仅匹配某些路由通配符(通过正则表达式)、HTTP 方法或主机名。但是路由系统可以通过使用条件进行扩展,使其具有几乎无限的灵活性:

    联系方式: 路径:/联系人 默认值:{ _controller: AcmeDemoBundle:Main:contact } 条件:“['GET', 'HEAD'] 和 request.headers.get('User-Agent') 中的 context.getMethod() 匹配 '/firefox/i'”

    条件是一个表达式,您可以在此处了解有关其语法的更多信息:The Expression Syntax。这样,除非 HTTP 方法是 GET 或 HEAD 并且 User-Agent 标头与 firefox 匹配,否则路由将不匹配。


    在 (2) 中,您显示了完整 URL 的正则表达式,而不仅仅是查询参数。据我所知,默认情况下无法更改路由组件使用的整个正则表达式。

    【讨论】:

    • 对于 (1) 我如何检查是否在请求标头上设置了 X-PDONE-SESSION-ID,无论哪个值来了? (理论上应该是一个 PHP 会话 ID)。围绕(2)我只需要检查参数是否是有效的 URL,如何?我刚刚写了一个正则表达式,因为我不知道另一种检查方法,对此有什么建议吗?
    猜你喜欢
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-15
    • 2017-03-13
    • 2020-08-01
    • 2015-01-01
    • 1970-01-01
    相关资源
    最近更新 更多