2013-09-05 26 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

像我这样的丑陋的人认为漂亮被高估。 –