【问题标题】:How to describe route with complex parameter in Symfony 2如何在 Symfony 2 中描述具有复杂参数的路由
【发布时间】:2012-11-06 13:18:59
【问题描述】:

我有路线:/user/username/{username}.{_format} username 可以有任何符号。 例如,以下所有内容都是有效的:

  • user
  • user.name
  • user.name@example.com
  • user@example.com
  • user.name jr
  • user'o name

等等……

username 的每个部分都可以包含任何字符...

_format 也是可选字符串,例如 jsonxml ...

如何在我的路由规则中描述它?

现在我有这个:

MyBundle_getUserByUsername:
    pattern: /user/username/{username}
    defaults: { _controller: MyBundle:User:getUserByUsername, _format: json }
    requirements:
        _method: GET
        username: ".+"

但它并没有那么有用。我无法指定format 参数...

我需要你们的帮助......

【问题讨论】:

    标签: regex symfony routing


    【解决方案1】:
    MyBundle_getUserByUsername:
        pattern: /user/username/{username}.{_format}
        defaults: { _controller: MyBundle:User:getUserByUsername, _format:json}
        requirements:
            _method: GET
            username: ".+(?<=.)"
    

    【讨论】:

    • 不是 Symfony,而是正则表达式。你只需要定义一个路由来执行下一个模式:“/^\/user\/username\/(.+?)(\.json|html)?$/”
    【解决方案2】:

    使用lazy quantificator

    MyBundle_getUserByUsername:
        pattern: /user/username/{username}.{_format}
        defaults: { _controller: MyBundle:User:getUserByUsername, _format: json }
        requirements:
            username: ".+?"
            _method: GET
            _format: html|json
    

    【讨论】:

    • 如果用户名是user.name@example.com,就像问题中一样,这将不起作用。
    • 对我来说效果很好。显示结果路由定义。另外,我用完整的路线定义更新了我的答案,检查一下,也许你错过了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-29
    • 2011-12-18
    • 2016-02-06
    相关资源
    最近更新 更多