首页 > 解决方案 > POST 路线中可选 slug 的可选训练斜线

问题描述

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

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

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

标签: phpsymfonysymfony4symfony-routing

解决方案


你可以尝试这样的事情:

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

由于默认情况下斜杠字符是路由参数分隔符,因此您需要重写路由,以便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

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


推荐阅读