2010-06-09 29 views
6

我正在遷移使用application.cfm的舊應用程序以使用application.cfc。該CFM設置了幾個全局如可能會在application.cfc中創建一個無處不在的全局變量?

<cfset dsn = "myDSN"> 

我試圖把該行的代碼onApplicationStart,onRequestStart等,但想打印出來的值在一個錯誤的測試頁的結果。在應用程序範圍中設置一個值(例如application.dsn)當然可以正常工作,但我處於緊急的最後期限之內,不能通過進行全站搜索來替代每個全局搜索。

我知道把這些放在範圍內是正確的做法,但暫時來說,有什麼方法可以切換到使用Application.CFC,但仍然創建非範圍的全局變量?

回答

9

試着把它放入onRequest()而不是onRequestStart()

+0

這奏效了,雖然我給一票下方還答案,因爲這也是很好的知道未來。 – DaveBurns 2010-06-09 18:56:44

4

您將需要Application.cfc和Application.cfm。將所有主要代碼從Application.cfm移到Applicaiton.cfc的正確部分。

然後,這可能是唯一的線,在Applicaiton.cfm:

<cfset variables.dsn = "myDSN" />

現在回去的Application.cfc並添加所有的功能外這樣:

<cfinclude template="Application.cfm" />

在您test.cfm,現在應該可以輸出而不範圍前綴DSN變量:

<cfoutput>#dsn#</cfoutput>

如果您在CFC內部的任何位置定義variables.dsn,則會將該變量放入CFC的變量範圍中,該變量範圍對於CFC是私有的。通過在CFM中定義它,然後包括CFM,它將保存在頁面請求的變量範圍中。

+2

如果你採取這種方法,我會將包含的文件命名爲globals.cfm,以避免對它的處理方式造成混淆,就像Application.cfm在以前版本的CF中一樣(它不是)。 – 2010-06-09 17:21:53

+0

有沒有人測試過這個有趣的方法?也許我對我的3個單行模板做錯了事,但它對我不起作用(CF9)。試過application.cfm和globals.cfm。說實話,我沒有想到它會起作用,因爲我沒有看到爲什麼在一個包含文件中設置一個變量應該「離開」包含cfc的範圍,並使得var全局可用。爲什麼直接在函數外部的application.cfc中設置var不應該以相同的方式工作。 onRequest()「Mixin」方法按預期工作。 – 2010-06-10 07:45:26

+0

我也在CF9上嘗試過這個,更新1的結果是負面的。 – 2011-10-05 13:35:26

1

經過這個自己的摔跤,我會給你我的解決方案。請注意,這適用於CF9,我不知道其他版本(在以前的版本中,onRequest和AJAX調用有問題)。基本上,你的Application.cfc中需要有onRequest函數。這是一個基本的模板:

<cffunction name="onRequest" access="public" returntype="void" output="true"> 
    <cfargument name="targetPage" type="string" required="true"> 

    <!--- include the requested page. ---> 
    <cfinclude template="#arguments.TargetPage#"> 
</cffunction> 

As far as I understand it: it's actually the cfinclude that enables you to access the functions. So, with this onRequest in your Application.cfc you can access the 'this' scope of the Application.cfc which would include your public functions & variables. 
If you want a more in depth example of this then check out Framework-1 by Sean Corfield. It does this exact thing, all API methods are contained in the Application.cfc. 
相關問題