在Symfony中,如果路线匹配,则可以转发到其他路线

问题描述 投票:0回答:1

我在两个分离的包中有两个路由:bundleA_route,bundleB_route。在我的/app/config/routing.yml中,我将它们加载为如下资源:

bundle_a_routing:
    resource: "@SomeABundle/Resources/config/routing.yml"
    prefix:   /

bundle_b_routing:
    resource: "@SomeBBundle/Resources/config/routing.yml"
    prefix:   /

在大多数情况下,这个序列是必需的,首先尝试匹配bundle_a_routing中的路线,然后尝试匹配bundle_b_routing中的路线,但是在一种情况下我想要例外,我想要在bundle_b_routing中定义的单个路线在bundle_a_routing中定义的更“特许”的路线之前匹配:

route_in_bundle_a:
    path: /admin/{path}
    defaults: { _controller: SomeABundle:SomeCtrl:someAction }
    methods: [GET]
    requirements:
        path: ^(.*)$

route_in_bundle_b:
    path: /admin/download/{formId}/{fileName}
    defaults: { _controller: SomeBBundle:SomeOtherCtrl:someOtherAction }
    methods: [GET]
    requirements:
        formId: \d+
        fileName: ^([a-fA-F0-9]{32}(?:\.[a-zA-Z0-9]{1,222})?)$

现在请求URI“http://servername/web/app_dev.php/admin/download/12/23d2fff7f606e93acac9ede5b4e2b394.png”匹配第一个,但我想匹配第二个......这样的情况下的官方场景是什么?

symfony
1个回答
0
投票

您应该更改导入路由的顺序,因此路由http://servername/web/app_dev.php/admin/download/12/23d2fff7f606e93acac9ede5b4e2b394.png将首先触发route_in_bundle_b,而没有下载段的路由将不会触发它,并将触发route_in_bundle_a规则。

© www.soinside.com 2019 - 2024. All rights reserved.