首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从application.cfm转换为application.cfc时无法访问变量

问从application.cfm转换为application.cfc时无法访问变量
EN

Stack Overflow用户
提问于 2012-03-31 02:41:07
回答 5查看 2.9K关注 0票数 1

我正在尝试将我支持的应用程序从application.cfm转换为application.cfc。我遵循了Ben Nadel的ColdFusion Application.cfc Tutorial And Application.cfc Reference,但是如果不将APPLICATION.添加到变量中,我的页面就无法访问应用程序范围内的任何变量。顺便说一句,这个应用程序目前使用了0个cfc。

这是我的application.cfc。

代码语言:javascript
复制
<cfcomponent displayname="Application" hint="Handle the application" output="true">

    <cfset THIS.Name = "AAS" />
    <cfset THIS.ApplicationTimeout = CreateTimeSpan( 0, 60, 0 , 0) />
    <cfset THIS.SessionManagement = true />
    <cfset THIS.setClientCookies = false />
    <cfset THIS.versionNum = '1'>
    <cfset THIS.genericUserID = 'o005265'>
    <cfset THIS.genericPassword = 'zo005265'>

    <cffunction 
        name="OnApplicationStart" 
        hint="Fires when the application is first created." 
        access="public" 
        output="false" 
        returntype="boolean">

       <cfset APPLICATION.aasURL = 'http://127.0.0.1:8500/aaas'>
       <cfset APPLICATION.dsn = 've0_aaas'>
       <cfset APPLICATION.aas_system = 'development (studio)'>

    <cfreturn true />
  </cffunction>
</cfcomponent>

基本上,我只是复制了application.cfm页面中的内容,并认为它的工作原理是一样的。我猜我必须在某个地方调用它?这是我唯一能想到的事情。任何帮助都是最好的。

-编辑

我在@EvikJames answer后面添加了OnRequest和OnApplicationStart方法

代码语言:javascript
复制
<cffunction name="OnApplicationStart" access="public" returntype="boolean" output="false" hint="Fires when the application is first created.">
    <!--- Return out. --->
    <cfset APPLICATION.aasURL = 'http://127.0.0.1:8500/aaas'>
    <cfset APPLICATION.datasource = 've0_aaas'>
    <cfset APPLICATION.aas_system = 'development (studio)'>
    <cfreturn true />
</cffunction>


<cffunction name="OnRequest" access="public" returntype="void" output="true" hint="Fires after pre page processing is complete.">
    <!--- Define arguments. --->
    <cfargument name="TargetPage" type="string" required="true">
    <!--- Include the requested page. --->
    <cfinclude template="#ARGUMENTS.TargetPage#" />

    <cfset VARIABLES.dsn = APPLICATION.dsn>
    <cfset VARIABLES.aasURL = APPLICATION.aasURL>
    <cfset VARIABLES.aas_system = APPLICATION.aas_system>
    <!--- Return out. --->
    <cfreturn />
</cffunction>
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-03-31 03:31:48

在您的onApplication start方法中,执行以下操作:

代码语言:javascript
复制
<cfset APPLICATION.datasource = 'MyDSN'>

在您的onRequest方法中,执行以下操作:

代码语言:javascript
复制
<cfset VARIABLES.DSN = APPLICATION.datasource>

然后,此查询将起作用:

代码语言:javascript
复制
<cfquery datasource="#dsn#">
// sql
</cfquery>

我要补充的是,当您完全升级时,您可以删除上面的所有代码,只需设置默认数据源:

代码语言:javascript
复制
<cfset THIS.datasource = 'MyDSN'>
票数 2
EN

Stack Overflow用户

发布于 2012-03-31 03:31:47

您并不是真的在尝试使用"application“变量(它们总是需要限定作用域)。我怀疑你以前的application.cfm页面上有这样的东西。

代码语言:javascript
复制
<cfapplicatin name="blah"...>

<cfset dsn = 'mydsn'/>

然后你就能做到:

代码语言:javascript
复制
<cfquery datasource="#dsn#">

此方法不利用应用程序范围...它只是在利用这样一个事实,即无论发生什么情况,您的application.cfm都会运行。它实际做的是将变量放在变量作用域中。因为CF总是首先检查“变量”作用域,所以你可以像#dsn#一样工作--但这与应用程序作用域不同。

要在Application.cfc中模拟此行为(已建议),您需要将变量放在"onRequest()“函数中,而不是"onApplicationstart()”函数中-如下所示:

代码语言:javascript
复制
<cffunction name="onRequest">
<cfset dsn = 'mydsn'/>
</cffunction>
票数 4
EN

Stack Overflow用户

发布于 2012-03-31 02:59:16

这是意料之中的。要引用应用程序变量,需要在它们前面加上application前缀。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9948699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档