首页 > 解决方案 > 仅对一条路由禁用路由前缀

问题描述

在 Symfony 5 中,我对路由使用前缀 ( fr, en, es):

/routes/annotations.yaml

controllers:
    resource: ../../src/Controller/
    type: annotation
    prefix: /{_locale}
    requirements:
        _locale: '%app_locales%'
    defaults:
        _locale: '%locale%'

但我只想禁用一条路由的前缀。

/routes/annotations.yaml 前面的代码之前,我把这个没有前缀键:

video_play:
    resource: ../../src/Controller/VideoPlayController.php
    type: annotation

404但是如果没有前缀 ( ),我的路线仍然无法访问,我必须在浏览器中输入 ( fr, en, es)。

这在我的控制器中:

class VideoPlayController extends BaseController
{
    /**
     * @Route(
     *     "/video-play/{_token}",
     *     name="video_play",
     *     methods="GET"
     * )
     * @Entity("userMedia", expr="repository.findOneByToken(_token)")
     */
    public function videoPlay(
        UserMedia $userMedia
    ): Response {
        ...

标签: symfony

解决方案


正如@msg 所说,路由会根据它们的顺序被覆盖。

尝试移动您的video_play配置后

controllers:
    resource: ../../src/Controller/
    type: annotation
    prefix: /{_locale}
    requirements:
        _locale: '%app_locales%'
    defaults:
        _locale: '%locale%'

video_play:
    resource: ../../src/Controller/VideoPlayController.php
    type: annotation

推荐阅读