3

CFWheels「ファイル」拡張子を含むクリーンな URL を使用してページを作成する方法がわかりません。

次のことができるようになりたいです。

これに当てはめると:

これらのドキュメントを読みましたが、実際の実装についてはまだ不明です。

/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>

ビューを実装するにはどうすればよいですか? それはすべき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.

4

1 に答える 1

4

ルートに関する仮定は正しいです。ただし、部分的にではなく、書き換えが適切に機能することを確認する必要があります。みたいなURLにアクセスできますよ/controller/actionね?違い/rewrite.cfm/controller/actionます。

したがって、ルート定義は次のようになります。

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

indexメソッドでは、検証したい実際の値を入力します(params.format動作するListFindはずです)。

このページのビュー テンプレートには、そのアクションの名前が必要です: /views/product/index.cfm。ビューを条件付きでロードする場合を除き、ここでは特別なことは何も必要ありません。たとえば、フォーマットごとに個別のビューをロードします。この場合、renderPage関数をチェックアウトします。デフォルトのビューをオーバーライドするために使用できます。

アップデート

OK、このソリューションをテストしましたが、うまくいきません。ルートは、区切り記号としてスラッシュ以外はサポートしていません。したがって、この種のルートは次の方法でのみ機能します。

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

CFWheels のコードを変更したくないので (これ以上のプル リクエストがなければ、これは悪い考えです)、Web サーバーの書き換えを使用することをお勧めします。たとえば、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>

などProductsXmlの名前のコントローラーを作成しようとするよりも、より良いアプローチだと思います。ProductsJson

于 2012-02-02T12:08:00.757 に答える