![](/img/trans.png)
[英]ColdFusion Application.cfc onRequestStart Session scope
[英]ColdFusion Application.cfc & cfinvoke & THIS scope
在使用CF application.cfc時 - 需要創建一些vars(在本范圍內) - 例如this.name和this.applicationtimeout()等。
我遇到了一些我認為是奇怪行為的事情 - 希望有人可以解釋為什么會發生這種情況以及可能的解決方法。
有很多“THIS”變量可以用來設置應用程序特定的變量(當然你必須在CFADMIN中檢查“允許應用程序特定的變量” - 我做了)
其中一個是THIS.mappings - 這是一個映射數組 - MINE看起來像這樣:
this.path = GetDirectoryFromPath( GetCurrentTemplatePath() );
this.mappings = {
'/files' = '#this.path#_my_files\'
,'/functions' = '#this.path#_my_functions\'
,'/logs' = '#this.path#_my_logs\'
};
它運行正常 - 當它被設置在application.cfc頂部的cfscript塊內時它工作正常 - 如果我把那個腳本塊放在它自己的文件中並在application.cfc中包含它
然而 - 試圖分割我的代碼 - 我想將我的所有應用程序設置放在settings.cfc中......(這里的想法是因為某些設置必須改變 - 我不必擔心'在哪里'看,我真的不想在我的app.cfc和settings.cfc中的其他應用程序或會話設置中分割這些內容。
所以我在settings.cfc中創建了一個名為getTHIS的方法,然后將腳本塊放在那里......然后使用
<cfinvoke component="settings"
method="getTHIS"
returnvariable="THIS"
/>
哪個工作 - 除了(似乎)映射...
this.name等,似乎都工作並設置 - 事實上this.mappings也設置得很好(所以看起來)如果我做了
<cfdump var="#THIS#" label="THIS" />
當我在app.cfc頁面上設置'字面'時,轉儲與THIS的轉儲相同。
但是 - 任何通過映射調用模板的嘗試都會產生一個標准“如果你想使用絕對路徑你必須創建一個映射等等......”
MY BIGGER的目標是(在應用程序啟動時)掃描目錄中的子目錄,並根據某些子目錄創建映射..但如果我不能將該功能抽象到它自己的功能中 - 我將被迫直接寫在app.cfc中(這不會殺了我,但同樣,我試圖在邏輯上對我的代碼進行分段......似乎有時間和地點可以設置這些映射的限制......是嗎?
所以我想最大的問題是 - 我可以通過外部方法設置this.mappings嗎? 我想我可以使用cfc調用恢復'我想要的設置',然后只需執行'set this.whatever = return form cfc' - (這可能是我的答案......)
謝謝
映射只能在'偽構造函數'中設置,而不能在Application.cfc中的任何方法內部設置 - http://adobe.ly/QN2oX1
您可以嘗試將this.mappings設置為CFC調用的結果(我無法想到為什么這不起作用),但如果它依賴於映射來執行此操作,則可能無法正常工作。
我沒有對此進行過測試,但我很確定如果你的application.cfc擴展你的settings.cfc它會工作。
component {
public any function getMappings() {
var mappings = {};
//code to get your directories etc.
return mappings;
}
}
component extends="settings" {
this.name = "xxxx";
this.mappings = getMappings();
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.