POST 路由中可选 slug 的可选尾部斜杠

Optional trainling slash for optional slugs in POST route

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

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

我的问题是,上面的路由仅适用于尾部斜杠。 这很明显,因为我在路径中的单词 "drive" 之后设置了这个斜杠。但是我怎样才能使尾部斜杠也可选?

你可以试试这样:

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

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