我使用Symfony CMF路由束创建动态路由(这里使用一个示例):
$route = new Route('/dynamic-url');
$route->setMethods("GET");
$route->setDefault('_controller', 'AppBundle:MyRoute:getResponse');
$routeCollection->add('my-dynamic-route', $route);响应从getResponseAction()函数加载到MyRouteController中:
/**
* No annotations here, because I want the url to be dynamic from the database
*/
public function getResponseAction(Request $request) {
return $this->render('dynamic-page-template.html.twig');
}当我转到'/dynamic-url‘时,它就能工作了。
在另一个控制器中,我想重定向到这个动态路由,如下所示:
return $this->redirectToRoute('my-dynamic-route');但是我得到了一个错误:“没有一个链式路由器能够生成路由:路由‘我的动态路由’没有找到。”
同样有趣的是:当我转到‘/dynamic’时,开发栏实际上说路线名是‘my-dynamic- name’。
编辑
当我加载所有路由时,我没有看到我的动态路由名称:
$this->get('router')->getRouteCollection();我觉得他们应该在这份名单上。
发布于 2017-06-01 08:19:28
因为它是一个动态路由,它没有保存在任何地方(比如routing.yml ),所以它只适用于已经定义好的请求。因此,在请求结束时,您的应用程序将立即“忘记”关于在运行时生成的新路由的。
当我加载所有路由时,我没有看到我的动态路由名称:
$this->get('router')->getRouteCollection();,我认为它们应该在这个列表中。
实际上是No.这取决于您在哪里调用$this->get('router')->getRouteCollection(); --只需尝试调用
dump($this->get('router')->getRouteCollection();)就在您要添加my-dynamic-route路由的Action返回语句之前。我相信你会在路线列表中看到你的my-dynamic-route,但如果你在其他地方叫它,你就不会看到它。
与其说是关于symfony,不如说是关于web的无状态性(参见为什么说HTTP是一个无状态协议?)
发布于 2017-07-20 15:28:56
我开始思考这个问题,并将你的问题指向了symfony上的一个路由问题。您标记了#symfony-cmf,我认为这将是我们的重要特性。
我还认为,当您使用/my-route持久化您的路由时,您还应该向路由器请求这个名称(或者如果使用该路由的内容对象为CMF )。
发布于 2017-07-21 09:57:33
如果您使用CmfRoutingBundle动态路由器,您应该坚持您的路由原则。这里的动态思想是,它们可以在运行时创建,例如在管理界面或其他地方通过代码创建。DynamicRouter从数据库加载路由。
如果使用PHPCR,则路由名是存储库id,通常类似于/cms/routes/my-route和您可以使用该名称生成它。。如果您可以访问从数据库加载的路由对象,也可以从数据库生成,而不是路径。如果您必须对应用程序中的路径进行硬编码,这表明通常配置的路由可能会更好。
如果您只是在动态中向路由集合添加一个路由,则必须确保在每个请求中都会出现这种情况,只有在添加它时才可用。使用CMF ChainRouter,您可以注册自己的路由器,但我不知道有一个很好的用例。要么您知道路由,然后您可以在routing.xml|yml|php配置文件中配置它。或者路由是动态加载的,在这一点上,您应该使用DynamicRouter,可能与自定义路径加载器一起使用。
https://stackoverflow.com/questions/44296792
复制相似问题