我想处理一个场景,当用户在该模板不存在时点击/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()
将返回的模板。
答案 0 :(得分:4)
我不认为这是一个hacky解决方案。这是该方法的用途,并且在返回false时,如果需要,ColdFusion将调用您在管理员中设置的标准错误处理程序。
唯一的情况是onSessionStart()没有运行,如果用户在第一次页面请求上点击onMissingTemplate()。如果由于某种原因需要用户进行会话,则可以检查是否存在会话范围,因为会话范围应该在onMissingTemplate()方法中可用并且处理得当。
答案 1 :(得分:2)
实际上 onMissingTemplate 而非 onTemplateMissing ;这是一种推荐的做法,而不是“hacky”。你这样做很好。