【问题标题】:Access Variable in CFC using URL Invocation Method使用 URL 调用方法访问 CFC 中的变量
【发布时间】:2013-09-06 08:50:40
【问题描述】:

我的 Application.cfm 中有一个变量,用于存储 cfqueries 的数据源。

<cfset mydatasource= 'somedatasorce'>

我可以在任何正常的cfm页面中使用它,如下所示:

<cfset any_var = #mydatasource#>

我有一个 cfm 页面,它调用一个动态构建查询的 cfc。这是CFC的URL调用方法。

我无法使用上述语句访问 CFC 中的“mydatasource”。它说“mydatasource”未定义。我尝试将其存储在应用程序范围中并在 CFC 中访问,但它再次说“mydatasource”在“应用程序”中未定义。

经过一番搜索,我发现需要实例化 CFC 才能访问 Application 范围。但是 URL Invocation 方法不会创建实例。

我可以使用查询字符串传递数据源,但我正在寻找更好、更安全的替代方案。

非常感谢任何建议。

谢谢!! :)

【问题讨论】:

  • 您使用的是什么版本的 ColdFusion?在 ColdFusion 9+ 中,您可以在 Application.cfc 中使用 this.datasource = 'dsname' 来设置将与任何 cfquery 或 ORM 操作一起使用的“默认”数据源。
  • "我发现需要实例化 CFC 才能访问 Application 范围。但是 URL Invocation 方法没有创建实例。"你在哪里读到的?我很确定这不是真的。然而@ScottStroz 的回答可能是这里最好的方法。
  • 它的 CF9 但我不能使用 Application.CFC 文件。我们可以在 Application.cfm 文件中设置数据源吗?
  • 不确定。试试看,让我们知道它是否有效。顺便说一句 - 为什么,以所有神圣的名义,你使用的是 CF9 而不是 Application.cfc?
  • 现在我想了想,我相当肯定this.datasource 只能在Application.cfc 中工作。您可以在 Application.cfm 中尝试的另一件事是设置 request.datasource,您应该能够在远程调用的 CFC 中访问它。

标签: coldfusion scope instance cfc


【解决方案1】:

我在这里向旧应用程序添加了许多 ajax 调用,为了获得一些特定于应用程序的设置,我创建了一个名为 App.cfc 的文件。它的内容很简单:

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

然后,我正在对它们进行 URL 调用的 CFC 文件简单地扩展了 App。所以在那些 CFC 中我可以做datasource="#this['Datasource']#"

可能不是完成工作的最“漂亮”的方法,但它一直在这里工作没有问题。

更新

我还应该提到,为了避免在 CFC 和 Application.cfm 中都有设置,我的 Application.cfm 中有类似的内容:

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

我正在使用的这些旧应用程序具有一个名为 App 的带有 VARIABLES 的结构,它是所有应用程序变量的副本。我看不出为什么在这种情况下你不能只做一个附加到 VARIABLES 的结构,因为这似乎是你期望数据源之类的东西出现在你的 CFM 页面中的地方。

【讨论】:

  • 像我这样丑陋的人认为漂亮被高估了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-27
  • 1970-01-01
  • 2011-10-26
  • 1970-01-01
  • 2017-12-20
  • 2021-11-21
相关资源
最近更新 更多