2013-09-05 27 views
1

我的Application.cfm中有一個變量,它存儲了cfqueries的數據源。使用URL調用方法訪問CFC中的變量

<cfset mydatasource= 'somedatasorce'> 

我可以在如下任何正常的CFM頁面使用它:

<cfset any_var = #mydatasource#> 

我已經調用動態地構建一個查詢CFC一個CFM頁面。這是CFC的URL調用方法。

我無法使用上述語句訪問CFC中的「mydatasource」。它說「mydatasource」是未定義的。我試圖將其存儲在CFC訪問的應用程序範圍&中,但它又說「mydatasource」在「應用程序」中未定義。

在一些搜索上,我發現需要實例化CFC才能訪問應用程序範圍。但URL調用方法不會創建實例。

我可以使用查詢字符串傳遞數據源,但我正在尋找更好的&更安全的替代方案。

任何建議,非常感謝。

謝謝! :)

+3

您使用的是什麼版本的ColdFusion?在ColdFusion 9+中,您可以使用Application.cfc中的this.datasource ='dsname'來設置將用於任何'cfquery'或ORM操作的'默認'數據源。 –

+1

「我發現需要實例化CFC才能訪問應用程序範圍,但URL調用方法不會創建實例。」你從哪裏讀到的?我相當肯定這不是真的。不過,@ ScottStroz的回答可能是這裏更好的方法。 –

+0

它的CF9,但我不能使用Application.CFC文件。我們可以在Application.cfm文件中設置數據源嗎? –

回答

1

我一直在這裏爲舊應用程序添加一些ajax調用,爲了獲得一些特定於應用程序的設置,我創建了一個名爲App.cfc的文件。它的內容很簡單:

<cfcomponent> 
<cfscript> 
this["datasource"] = "something"; 
..... and so on ..... 
</cfscript> 
</cfcomponent> 

然後CFC文件我讓我的URL調用他們簡單的擴展應用程序。因此,在這些CFCs內,我可以做datasource="#this['Datasource']#"

可能不是最「完美」的方式完成工作,但它一直在這裏工作沒有問題。

UPDATE

我應該還提到,爲了避免在這兩個氟氯化碳和在Application.cfm有設置,我有我的Application.cfm是這樣的:

<cfscript> 
objApp = CreateObject("component", "Components.App"); 
StructAppend(App, objApp); 
</cfscript> 

我正在使用的這些舊的應用程序具有名爲App的VARIABLES結構,它是所有應用程序變量的副本。我沒有理由爲什麼在這種情況下,你不能僅僅爲VARIABLES添加一個結構,因爲看起來就是你期望CFM頁面中的數據源等信息。

+0

像我這樣的醜陋的人認爲漂亮被高估。 –