2

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

它似乎在我的测试中运行良好,但我担心通过这个 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>

请注意,同样在我的方法中,我正在对返回 trueonRequest的模板进行进一步处理。isFooTemplate()

4

2 回答 2

4

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

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

于 2009-06-16T20:00:34.200 回答
2

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

于 2009-06-16T21:10:57.020 回答