使用Symfony的CMS应用动态路由

问题描述

我确定以前已经有人问过这个问题,但是我找不到我需要的东西。 我正在Symfony 4.4中构建CMS,并且需要一个动态路由器来从数据库获取其溃败和页面信息。需要使用户能够轻松添加页面并将其删除功能

我可以找到有关使用父项(如“ / blogs / {slug}”)建立动态页面的信息 但我正在尝试不使用“ / blogs /”而仅使用“ / {slug}”来构建它。

据我所知,我不能仅仅在这样的控制器中使用路由注释

     /**
     * @Route("/{path}",name="Pages")
     */
    public function index($path,Request $request): Response {
      ...
    }

这将适用于除首页以外的所有路线,并使其他设置的路线不起作用(我相信,如果我错了,请告诉我,我想错了。)

我当时想我可以编写一个PHP程序,根据数据库中的信息以YAML,XML或PHP生成一个Routes文件,但我想知道是否有更有效或更有效的方法来构建此功能

对Symfony还是陌生的,感觉我什么都不知道。

解决方法

我找到了解决方案。 不确定这是最佳做法,但是否有效。 https://symfony.com/doc/4.4/routing/custom_route_loader.html 使用自定义路由加载程序,我创建了一个加载函数,该函数调用我的entityManager以获取我要用于CMS的所有URL。 然后,我将这样的路由添加到一个控制器类函数中

        foreach ($URLs as $url) {
            $defaults = array('_controller' => 'App\Controller\CMSController::index');
            $requirements = array('parameter' => '\d+');
            $route = new Route($url->getUrl(),$defaults,$requirements);
            $routes->add($url->getPageFunctionName(),$route);
        }