3

根据我对 chwheels 的一点了解,我知道路线存储在应用程序范围内,即准确地说是在 application.wheels.routes 中。它还在 application.wheels.namedroutepositions 中维护路线位置。

现在我在 application.wheels.routes 中添加了路由,即控制器、动作、模式、名称,并且还添加了 namedRoutePositions 结构。如下:

<cfset myRoute.controller = 'pages' >
<cfset myRoute.action = 'about' >
<cfset myRoute.pattern = 'about_my_project' >
<cfset myRoute.name = 'about' >

<cfset structAppend(application.wheels.routes[3],myRoute) />
<cfset structInsert(application.wheels.namedroutepositions,'about','3',true)/>

上面的代码被添加到我在应用程序启动时调用的 settings.cfc 中。如果我在添加上述代码后将 application.wheels.routes 和 application.wheels.namedroutepositions 转储到 settings.cfc 中,它会反映在这些各自的结构中,但是当我尝试访问我刚刚添加的新路线时,它不会工作。此外,当我将 application.wheels.routes 和 application.wheels.namedroutepositions 转储到另一个 cfc 中时,它没有显示新添加的路由,即新添加的路由没有持续存在。如何使新添加的路由在整个应用程序中持续存在?我不确定出了什么问题。是否有任何其他变量/结构我需要更新路线信息?我还需要做些什么来完成这项工作吗?

注意:暂时,我已经手动添加了这条路线。当这个实验成功时,我会让这个代码动态添加路由。

感谢您提前提供的所有帮助。

4

2 回答 2

2

designdevelopment模式下,我相信每个请求都会重新生成路由,这就是为什么你失去了application范围内的价值。

也就是说,application范围不是保存路由的好地方,因为application重新加载应用程序时范围会刷新。(你可能已经知道了。)

您可以创建一个完全动态的路线的一种方法是这样的(尽管我承认它有点难看):

<cfset addRoute(name="page", pattern="[folder1]/[folder2]/[folder3]/[folder4]/[folder5]", controller="pages", action="show")>
<cfset addRoute(name="page", pattern="[folder1]/[folder2]/[folder3]/[folder4]", controller="pages", action="show")>
<cfset addRoute(name="page", pattern="[folder1]/[folder2]/[folder3]", controller="pages", action="show")>
<cfset addRoute(name="page", pattern="[folder1]/[folder2]", controller="pages", action="show")>
<cfset addRoute(name="page", pattern="[folder1]", controller="pages", action="show")>
<cfset addRoute(name="root", pattern="", controller="someController", action="someAction")>

然后,如果需要通过数据库动态控制路由,您可以controllers/Pages.show()使用params.folder1through进行适当的查询params.folder5

请注意,这些动态路由应该在您需要指定的任何其他路由之后,但就在空root路由之前。

您还想看看 Tom 在他的回答中提到的 ColdRoute 插件是否对通配符路由有任何作用。

像这样的东西是最合适的,因为路由应该硬编码在config/routes.cfm. 不要为此而战。

于 2014-01-13T22:24:46.593 回答
1

冒着说明显而易见的风险,你为什么要在这里反对车轮公约?

为什么不使用http://cfwheels.org/docs/1-1/chapter/using-routes中概述的约定在 config/routes.cfm 中添加内容?

你可以做各种“动态”路线,即

addRoute(name="product", pattern="products/[categorySlug]/[productSlug]", controller="products", action="product");

不过,我可能误解了您要达到的目标。如果您真的想弄乱内部轮子的东西,请查看 Coldroute 插件:http ://cfwheels.org/plugins/listing/67

于 2014-01-13T21:52:24.157 回答