使用 buildURL 的路径信息太多
too much pathinfo using buildURL
我试图了解如何使用 FW/1
版本 4 构建 REST-API。
我在 Application.cfc
:
中设置了这个
<cfset variables.framework.routes = [
{ "$GET/persons/:id/$" = "/persons/show/id/:id" }
]>
我的控制器方法
<cffunction name="show">
<cfargument name="rc" type="struct" required="true">
<cfset local.strURL = variables.fw.buildURL(
action = 'persons.show',
queryString = 'id=123'
)>
<cfset variables.fw.renderData().data( { strURL = local.strURL } ).type( "json" )>
</cffunction>
我调用 /persons/123
并得到这个输出:
{"URL":"/persons/show/id/123"}
我不喜欢这个生成的 URL 中的 /show/
路径信息。它不是我在浏览器中请求的 URL 的一部分(或通过 AJAX 等)。有没有办法在生成的 URL?
中摆脱它
这不是 FW/1 中的功能。这个在2012年考虑过,但是被否决了
参见:https://github.com/framework-one/fw1/issues/145
根据 Sean Corfield 的说法,核心问题过去是(现在也是):
Interesting idea but I think you'll find that, in general, routes =>
URLs is actually a many-to-one mapping so you can't reliably go
backwards from URLs (actions / params) to a unique route. I've talked
that over a few times with people and so far no one has managed to
come up with a mapping that works in all cases.
我试图了解如何使用 FW/1
版本 4 构建 REST-API。
我在 Application.cfc
:
<cfset variables.framework.routes = [
{ "$GET/persons/:id/$" = "/persons/show/id/:id" }
]>
我的控制器方法
<cffunction name="show">
<cfargument name="rc" type="struct" required="true">
<cfset local.strURL = variables.fw.buildURL(
action = 'persons.show',
queryString = 'id=123'
)>
<cfset variables.fw.renderData().data( { strURL = local.strURL } ).type( "json" )>
</cffunction>
我调用 /persons/123
并得到这个输出:
{"URL":"/persons/show/id/123"}
我不喜欢这个生成的 URL 中的 /show/
路径信息。它不是我在浏览器中请求的 URL 的一部分(或通过 AJAX 等)。有没有办法在生成的 URL?
这不是 FW/1 中的功能。这个在2012年考虑过,但是被否决了
参见:https://github.com/framework-one/fw1/issues/145
根据 Sean Corfield 的说法,核心问题过去是(现在也是):
Interesting idea but I think you'll find that, in general, routes => URLs is actually a many-to-one mapping so you can't reliably go backwards from URLs (actions / params) to a unique route. I've talked that over a few times with people and so far no one has managed to come up with a mapping that works in all cases.