Предположение о маршрутах верное. Но вы должны убедиться, что переписывание работает правильно, скажем, не частично. Вы можете получить доступ к 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 . Может использоваться для переопределения представления по умолчанию.
UPDATE
ОК, я протестировал это решение, и оно не будет работать. Маршруты не поддерживают ничего, кроме косой черты как разделителя. Так что этот вид маршрута может работать только так:
<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>
Думаю, что это лучший подход, чем пытаться создавать контроллеры с именами, такими как ProductsXml
, ProductsJson
и т. Д.