更改路线加载顺序的最佳方法

时间:2018-07-16 19:20:52

标签: symfony routes symfony4

我的控制器中的路由已加载到/config/routes/annotations.yaml

controllers:
     resource: ../../src/Controller/
     type: annotation

我在/config/routes.yaml中有路由

about:
    path:         /about
    controller:   Symfony\Bundle\FrameworkBundle\Controller\TemplateController::templateAction
    defaults:
        template: front/about.html.twig
        ...

“控制器”中的动态路线覆盖了我的“静态”路线。

在控制器中加载“静态”路由的最佳方法是什么。

我通过注释/config/routes/annotations.yaml中的内容并将其粘贴到/config/routes.yaml的末尾来使其工作,但是我认为这不是最好的方法... < / p>

3 个答案:

答案 0 :(得分:1)

从技术上讲,这可能还不够。在此之后加载的任何路由都将被忽略,如果您使用的是注释,则必须将该操作放入按字母顺序排序的最后一个控制器的最后一个操作中。

在yml中配置此路由,并将其放在route.yml的末尾。

此路由将是最后执行的一条命令(性能受到影响),它将捕获所有请求,因此请确保正确抛出404-s。

(我是否正确假设客户端希望能够完全配置路由?例如CMS页面?这种情况发生过几次)

答案 1 :(得分:0)

它不想更改我的网址,也不想使用评论中建议的字母技巧。

我通过更改内核中导入路由的顺序来修复它。

代替:

protected function configureRoutes(RouteCollectionBuilder $routes)
    {
        $confDir = $this->getProjectDir().'/config';

        $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob');
        $routes->import($confDir.'/{routes}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob');
        $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob');
    }

protected function configureRoutes(RouteCollectionBuilder $routes)
        {
            $confDir = $this->getProjectDir().'/config';
            # routes loaded in routes.yaml
            $routes->import($confDir.'/{routes}'.self::CONFIG_EXTS, '/', 'glob');
            # routes loaded in routes/annotations.yaml
            $routes->import($confDir.'/{routes}/*'.self::CONFIG_EXTS, '/', 'glob');
            $routes->import($confDir.'/{routes}/'.$this->environment.'/**/*'.self::CONFIG_EXTS, '/', 'glob');
        }

答案 2 :(得分:0)

您可以通过将具有注释的控制器放在route.xml中的静态路由之后来避免更改内核逻辑:

browserconfig:
    path: /browserconfig.xml
    controller: Symfony\Bundle\FrameworkBundle\Controller\TemplateController::templateAction
    defaults:
        template: browserconfig.xml.twig

app_document:
    resource: App\Controller\DocumentController
    type: annotation