0

我正在开发一个冷箱应用程序,我想创建一个接受“n”个路径变量作为一个变量的路由。这就是我的意思。

http://localhost/api/variable1/variable2/variable3/...

我希望能够将之后的所有内容/api作为一个路径变量获取,我可以在其中拆分/并获取值,或者能够在/api.

有没有办法设置一个路由来做到这一点?

with(pattern="/api", handler="api")
    .addRoute(pattern="/:variables", action="index")
.endWith();

任何想法将不胜感激。提前致谢。

4

1 回答 1

5

您可能知道,默认的路由范例是这样的名称值对:

http://localhost/api/name1/value1/name2/value2/name3/value3

无需为此创建自定义路由,因为路由的匹配部分之后的所有内容都被分解为名称/值对并自动放置在 rc 中。

现在,听起来您只想在路线中包含值。如果您知道您将拥有的最大变量数,您可以创建一个可选的、增量命名的变量路径。

addRoute(pattern="/:var1?/:var2?/:var3?/:var4?/:var5?", action="index")

现在,如果你真的可能有无限数量的变量,那么就没有办法做一条与之匹配的路线。你可以做的是让你的路由匹配 /api 位并编写一个 onRequestCapture 拦截器来获取 URL 并对其进行定义解析。请注意,您可能需要删除 ColdBox 将尝试放入 rc.xml 的名称/值对。

我要补充一点注意事项——真正起作用的唯一方法是让你提前知道传入变量的顺序,如果你知道,没有理由不能创建一个已知的路线。否则,您基本上是在重新重建 SES 拦截器,这是一种称为“内部平台效应”的反模式

http://wiki.coldbox.org/wiki/URLMappings.cfm#URL_Mappings

http://wiki.coldbox.org/wiki/Interceptors.cfm#Core_Interception_Points

http://en.wikipedia.org/wiki/Inner-platform_effect

于 2014-08-01T19:39:49.207 回答