gpt4 book ai didi

coldfusion - 如何在 CFWheels 中使用 URL 中的文件类型呈现扩展名为 "file"的页面,如 xml、json、csv 等?

转载 作者:行者123 更新时间:2023-12-04 21:15:54 26 4
gpt4 key购买 nike

我似乎不知道如何在 CFWheels 中创建页面使用包含"file"扩展名的干净 URL。

我希望能够做到以下几点:

与此相关:

我已经通读了这些 docs但我仍然不清楚实际的实现情况。

假设我有一个如下所示的 Controller ( /controllers/Product.cfc):

<cfcomponent extends="Controller">

<cffunction name="init">
<cfset provides("html,json,xml")>
</cffunction>

<cffunction name="index">
<cfset products = model("product").findAll(order="title")>
<cfset renderWith(products)>
</cffunction>

</cfcomponent>

如何实现 View ?应该是views/products/index.xml.cfm

<?xml version="1.0" encoding="UTF-8"?>
<products>
<product><!-- product data goes here --></product>
</products>

我如何实现 routes.cfm

我应该注意,我还使用默认的 web.config并且有 <cfset set(URLRewriting="On")>config/setting.cfm .

最佳答案

关于路线的假设是正确的。但是你必须确保重写工作正常,而不是部分。您可以访问像 /controller/action 这样的 url,对吧?不是 /rewrite.cfm/controller/action

所以路由定义可以是这样的:

<cfset addRoute(name="indexProducts", pattern="products.[format]", controller="product", action="index") />

index 方法中,您将在 params.format 中填充实际值,您要验证该值(ListFind 应该有效) .

此页面的 View 模板应具有其操作的名称:/views/product/index.cfm。除非你想有条件地加载 View ,否则这里不需要什么特别的,例如每种格式的单独 View 。在这种情况下,您想查看 renderPage功能。它可用于覆盖默认 View 。

更新

好的,我已经测试了这个解决方案,但它行不通。路由不支持除斜线作为分隔符之外的任何内容。所以这种路由只能这样工作:

<cfset addRoute(name="indexProducts", pattern="products/[format]", controller="product", action="index") />

我想我们不想修改 CFWheels 代码(如果没有进一步的拉取请求,这是个坏主意),所以我建议使用网络服务器重写。例如,在 Apache 中它可能看起来像这样:

RewriteRule ^products\.(xml|json|html)$ product/index?format=$1 [NS,L]

您使用的是 IIS,因此它看起来应该与此类似(未测试):

<rule name="Products listing" enabled="true">
<match url="^products\.(xml|json|html)$" ignoreCase="true" />
<action type="Rewrite" url="product/index?format={R:1}" />
</rule>

认为这比尝试创建名为 ProductsXmlProductsJson 等的 Controller 更好。

关于coldfusion - 如何在 CFWheels 中使用 URL 中的文件类型呈现扩展名为 "file"的页面,如 xml、json、csv 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9105375/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com