在Application.cfc中覆盖onMissingTemplate处理

时间:2009-06-16 18:56:09

标签: coldfusion application.cfc

我想处理一个场景,当用户在该模板不存在时点击/somePage.cfm的url并使用其他目录中的模板。我知道我可以通过重写apache等来做到这一点但我真的不想在那里存储逻辑所以我试图在我的Application.cfc中覆盖onTemplateMissing行为。

我的测试似乎工作得很好,但是我很担心这个hacky解决方案我正在缩短我尚未看到的一些部分(例如我目前没有使用的方法,如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()将返回的模板。

2 个答案:

答案 0 :(得分:4)

我不认为这是一个hacky解决方案。这是该方法的用途,并且在返回false时,如果需要,ColdFusion将调用您在管理员中设置的标准错误处理程序。

唯一的情况是onSessionStart()没有运行,如果用户在第一次页面请求上点击onMissingTemplate()。如果由于某种原因需要用户进行会话,则可以检查是否存在会话范围,因为会话范围应该在onMissingTemplate()方法中可用并且处理得当。

答案 1 :(得分:2)

实际上 onMissingTemplate 而非 onTemplateMissing ;这是一种推荐的做法,而不是“hacky”。你这样做很好。