1

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

$route = new Route('/dynamic-url');
$route->setMethods("GET");
$route->setDefault('_controller', 'AppBundle:MyRoute:getResponse');

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

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

/**
 * 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');

但我收到此错误:“没有一个链接的路由器能够生成路由:找不到路由'my-dynamic-route'”

也很有趣:当我转到“/dynamic-url”时,开发栏实际上说路由名称是“my-dynamic-route”。

编辑

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

$this->get('router')->getRouteCollection();

我认为他们应该在这个列表中。

4

3 回答 3

1

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

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

实际上没有。这取决于你打电话的地方$this->get('router')->getRouteCollection(); 只是试着打电话

dump($this->get('router')->getRouteCollection();)

就在您要添加my-dynamic-route路线的 Action 中的 return 语句之前。我相信您会my-dynamic-route在路线列表中看到您的,但如果您在其他任何地方调用它 - 您将看不到它。

与其说是 symfony,不如说是 web 的无状态特性(参见Why say that HTTP is a stateless protocol?

于 2017-06-01T08:19:28.493 回答
0

I started to think about this and pointed your question to an routing issue on symfony-cmf. You tagged with #symfony-cmf and i think this would be important feature for us.

I also think, when you persist your route with /my-route you should also ask the router for that name (or in case of the CMF with an content object with that a route.)

于 2017-07-20T15:28:56.003 回答
0

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

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

如果您只是动态地将路由添加到路由集合,则必须确保在每个请求中都发生这种情况,它仅在您添加时可用。使用 CMF ChainRouter,您可以注册自己的路由器来执行此操作,但我不知道有什么好的用例。要么你知道路由,然后你可以在 routing.xml|yml|php 配置文件中配置它。或者路由是动态加载的,此时您应该使用 DynamicRouter,可能与自定义路由加载器一起使用。

于 2017-07-21T09:57:33.250 回答