2009-06-16 47 views
2

我想處理用戶在該模板不存在時點擊/somePage.cfm的url並使用其他目錄中的模板的情況。我知道我可以通過重寫apache等來做到這一點,但我真的不想在那裏存儲邏輯,所以我試圖在我的Application.cfc中覆蓋onTemplateMissing行爲。在Application.cfc中覆蓋onMissingTemplate處理

它似乎在我的測試中工作正常,但我擔心做這個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()將返回真實的模板。

回答

4

我不認爲這是一個hacky解決方案。這是該方法的用處,並且在返回false時,如果需要,ColdFusion將調用您在管理員中設置的標準錯誤處理程序。

onSessionStart()沒有運行的唯一情況是,如果用戶在有史以來第一個頁面請求中命中onMissingTemplate()。如果由於某種原因需要用戶進行會話,則可以檢查會話作用域的存在,因爲會話作用域應該在onMissingTemplate()方法中可用,並進行適當的處​​理。

2

實際上它是onMissingTemplate不是onTemplateMissing;這是一個推薦的做法,根本不是'hacky'。你很好地這樣做。