首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony重定向到动态路由名称

Symfony重定向到动态路由名称
EN

Stack Overflow用户
提问于 2017-06-01 00:48:39
回答 3查看 2K关注 0票数 1

我使用Symfony CMF路由束创建动态路由(这里使用一个示例):

代码语言:javascript
复制
$route = new Route('/dynamic-url');
$route->setMethods("GET");
$route->setDefault('_controller', 'AppBundle:MyRoute:getResponse');

$routeCollection->add('my-dynamic-route', $route);

响应从getResponseAction()函数加载到MyRouteController中:

代码语言:javascript
复制
/**
 * 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‘时,它就能工作了。

在另一个控制器中,我想重定向到这个动态路由,如下所示:

代码语言:javascript
复制
return $this->redirectToRoute('my-dynamic-route');

但是我得到了一个错误:“没有一个链式路由器能够生成路由:路由‘我的动态路由’没有找到。”

同样有趣的是:当我转到‘/dynamic’时,开发栏实际上说路线名是‘my-dynamic- name’。

编辑

当我加载所有路由时,我没有看到我的动态路由名称:

代码语言:javascript
复制
$this->get('router')->getRouteCollection();

我觉得他们应该在这份名单上。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-06-01 08:19:28

因为它是一个动态路由,它没有保存在任何地方(比如routing.yml ),所以它只适用于已经定义好的请求。因此,在请求结束时,您的应用程序将立即“忘记”关于在运行时生成的新路由的

当我加载所有路由时,我没有看到我的动态路由名称:$this->get('router')->getRouteCollection();,我认为它们应该在这个列表中。

实际上是No.这取决于您在哪里调用$this->get('router')->getRouteCollection(); --只需尝试调用

代码语言:javascript
复制
dump($this->get('router')->getRouteCollection();)

就在您要添加my-dynamic-route路由的Action返回语句之前。我相信你会在路线列表中看到你的my-dynamic-route,但如果你在其他地方叫它,你就不会看到它。

与其说是关于symfony,不如说是关于web的无状态性(参见为什么说HTTP是一个无状态协议?)

票数 1
EN

Stack Overflow用户

发布于 2017-07-20 15:28:56

我开始思考这个问题,并将你的问题指向了symfony上的一个路由问题。您标记了#symfony-cmf,我认为这将是我们的重要特性。

我还认为,当您使用/my-route持久化您的路由时,您还应该向路由器请求这个名称(或者如果使用该路由的内容对象为CMF )。

票数 0
EN

Stack Overflow用户

发布于 2017-07-21 09:57:33

如果您使用CmfRoutingBundle动态路由器,您应该坚持您的路由原则。这里的动态思想是,它们可以在运行时创建,例如在管理界面或其他地方通过代码创建。DynamicRouter从数据库加载路由。

如果使用PHPCR,则路由名是存储库id,通常类似于/cms/routes/my-route您可以使用该名称生成它。。如果您可以访问从数据库加载的路由对象,也可以从数据库生成,而不是路径。如果您必须对应用程序中的路径进行硬编码,这表明通常配置的路由可能会更好。

如果您只是在动态中向路由集合添加一个路由,则必须确保在每个请求中都会出现这种情况,只有在添加它时才可用。使用CMF ChainRouter,您可以注册自己的路由器,但我不知道有一个很好的用例。要么您知道路由,然后您可以在routing.xml|yml|php配置文件中配置它。或者路由是动态加载的,在这一点上,您应该使用DynamicRouter,可能与自定义路径加载器一起使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44296792

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档