Переопределить обработку onMissingTemplate в Application.cfc - PullRequest
2 голосов
/ 16 июня 2009

Я хочу обработать сценарий, когда пользователь нажимает URL-адрес /somePage.cfm, когда этот шаблон не существует, и использует шаблон из другого каталога. Я знаю, что могу сделать это с помощью переписывания в apache и т. Д., Но я не хочу хранить там логику, поэтому я попытался переопределить поведение onTemplateMissing в моем Application.cfc.

Кажется, что в моем тестировании все работает нормально, но я обеспокоен тем, что делаю это хакерское решение. Я сокращаю некоторые части, которые я еще не видел (например, методы, которые я сейчас не использую, такие как onSessionStart и т. Д. .) и может столкнуться с проблемами в будущем.

Вот что я сейчас делаю:

<cffunction name="onMissingTemplate">
    <cfargument name="targetPage" />
    <!--- Handle any templates that we're really loading from elsewhere --->
    <cfif isFooTemplate(arguments.targetPage)>
        <cfset onRequestStart(arguments.targetPage) />
        <cfset onRequest(arguments.targetPage) />
        <cfset onRequestEnd(arguments.targetPage) />
        <cfreturn true />
    </cfif>
    <cfreturn false />
</cffunction>

Обратите внимание, что в моем методе onRequest я выполняю дальнейшую обработку шаблонов, для которых isFooTemplate() вернет true.

Ответы [ 2 ]

4 голосов
/ 17 июня 2009

Я не думаю, что это хакерское решение. Для этого и предназначен метод, и при возврате false ColdFusion вызовет стандартный обработчик ошибок, который вы установили в администраторе, если хотите.

Единственный случай, когда onSessionStart () не запускался, - это если пользователь нажимает onMissingTemplate () при первом запросе страницы. Если вам по какой-либо причине требуется, чтобы у пользователя был сеанс, вы можете проверить наличие области сеанса, поскольку область сеанса должна быть доступна в методе onMissingTemplate () и обрабатывать ее соответствующим образом.

2 голосов
/ 17 июня 2009

Это на самом деле onMissingTemplate не onTemplateMissing ; и это рекомендуемая практика, а не «хакерская» вообще. С тобой все в порядке.

...