【问题标题】:Optional trainling slash for optional slugs in POST routePOST 路由中可选 slug 的可选尾部斜杠
【发布时间】:2020-03-21 20:39:21
【问题描述】:

我正在使用 Symfony 4.2。当我设置带有可选参数的路由时,我仍然可以使用不带斜杠的路由吗?

api_post:
    path: /api/drive/{slug?}
    controller: App\Controller\Api::load
    methods: POST

我的问题是,上述路线仅适用于斜杠。 这很明显,因为我在路径中的“驱动器”一词之后设置了这个斜杠。但是我怎样才能使尾部斜杠也成为可选的呢?

【问题讨论】:

    标签: php symfony symfony4 symfony-routing


    【解决方案1】:

    你可以试试这样的:

    api_post:
        path: /api/{drive}{slug?}
        controller: App\Controller\Api::load
        methods: POST
        requirements:
            drive: "drive?"
            slug: '[a-zA-Z0-9]*' 
    

    由于by default the slash character is a route parameter separator,您需要重写路由,以便drive 是一个可以选择接受/ 作为最后一个字符的参数。

    我为slug 使用了一个简单的正则表达式,您需要找到一个适合您的用例的表达式。

    一点也不漂亮,但它确实有效。

    就个人而言,我只会有两条不同的路线:

    api_post_root:
        path: /api/drive
        controller: App\Controller\Api::load
        methods: POST
    
    
    api_post:
        path: /api/drive/{slug?}
        controller: App\Controller\Api::load
        methods: POST
    

    更直观,更容易理解,如果你真的想要,你甚至可以用同一个控制器来处理它。

    【讨论】:

    • 谢谢@yivi。我进不去工作。我不得不稍微改变一下我的示例,我尝试了路径:/{apidrive}{slug?} 和要求:apidrive:“api/drive/?” ...但是如果在我的 url (/api/drive/) 中添加斜杠,则找不到。
    • 顺便说一句:如果我从路径中删除 {slug?} 就可以了
    • 如果我使 slug 不是可选的,它会起作用,并将其添加为 slug 的要求:slug: "^$|^(!\/)"
    猜你喜欢
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2016-03-11
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多