Symfony的重定向到动态路由名称
我使用Symfony的CMF路由包来创建动态路由(我用一个例子在这里):Symfony的重定向到动态路由名称
$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');
}
当我去'/动态网址',它的作品。
当另一个控制器,我想重定向到这个充满活力的路线,像这样:
return $this->redirectToRoute('my-dynamic-route');
但我得到这个错误:“链接的路由器中没有一个能够产生路线:路线“我-dynamic-route'not found“
另一个有趣的事情是:当我进入'/ dynamic-url'时,dev栏实际上表示路由名是'my-dynamic-route'。
编辑
当我加载所有的路线,我没有看到我的动态路由名称:
$this->get('router')->getRouteCollection();
我认为他们应该在列表中。
由于它是一个动态路由,它不会被保存在任何地方(如routing.yml),它只会在Request被定义的地方使用。因此,在请求您的应用程序结束时立即“忘记”关于在运行时生成的新路线。
When I load all the routes, I don't see my dynamic route names:
$this->get('router')->getRouteCollection();
I think they should be in this list.
Actualy号这取决于你在哪里打电话$this->get('router')->getRouteCollection();
只是尝试调用
dump($this->get('router')->getRouteCollection();)
在你的行动return语句,你要添加的my-dynamic-route
路线之前。我相信你会在路线列表中看到你的my-dynamic-route
,但是如果你在其他地方叫它 - 你不会看到它。
它不太了解一点symfony而有关Web的无状态(见Why say that HTTP is a stateless protocol?)
我开始思考这个问题,并指出你的问题的routing issue上的symfony-CMF。你用#symfony-cmf标记,我认为这对我们来说是重要的特性。
我也觉得,当你与/my-route
坚持你的路线,你也应该问的路由器该名称(或者在CMF的情况下与该路线的内容对象。)
如果使用CmfRoutingBundle动态路由器,你应该坚持你的路线原则。这里的动态思想是它们可以在运行时创建,例如,在管理界面或其他地方通过代码。 DynamicRouter从数据库加载路由。
如果使用PHPCR-ODM,路由名称是存储库ID,通常类似/cms/routes/my-route
和you can generate it with that name。如果您有权访问从数据库加载的路由对象,则也可以从中生成路径对象,而不是路径。如果您必须在应用程序中对路径进行硬编码,则表明可能是正常配置的路线会更好。
如果您只是将动态路由添加到路由集合中,则必须确保在每个请求中都会发生这种情况,只有当您添加它时才可以使用该路由。通过CMF ChainRouter,你可以注册自己的路由器,但我不知道这是一个很好的用例。要么你知道路由,那么你可以在routing.xml | yml | php配置文件中配置它。或者路线是动态加载的,在这一点上,您应该使用DynamicRouter,可能使用custom route loader。
Thnx!动态路由确实“被遗忘”,而静态路由被保存。我切换到使用'LoaderInterface',所以路线被保存。我使用这个教程http://mmoreram.com/blog/2013/10/01/dynamic-routes-in-symfony2/ – BigJ