首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ColdFusion中的全局变量

ColdFusion中的全局变量
EN

Stack Overflow用户
提问于 2015-08-21 09:49:01
回答 2查看 4.8K关注 0票数 2

2个问题-

在application.cfm的CF8中,我可以像这样设置全局变量

代码语言:javascript
复制
<cfset DSN = "dej6_42">

我现在正在尝试调整到CF10/Lucee中的Application.cfc,但不知道如何设置这个相同的变量。

这是我当前的Application.cfc

代码语言:javascript
复制
<cfcomponent output="false"> 

    <cfset This.name = "My Application"> 
    <cfset This.clientmanagement="True"> 
    <cfset This.loginstorage="Session"> 
    <cfset This.sessionmanagement="True"> 
    <cfset This.sessiontimeout="#createtimespan(0,0,10,0)#"> 
    <cfset This.applicationtimeout="#createtimespan(5,0,0,0)#">

    <cfset DSN = "dej6_42">
</cfcomponent>

我试过了

代码语言:javascript
复制
<cfset This.DSN = "dej6_42">

然后尝试在单独的页面中调用

代码语言:javascript
复制
<cfoutput>#Applicaton.DSN#</cfoutput>

我认为从我的研究来看,我需要同时使用application.cfc和application.cfm来完成上述任务。*编辑-我尝试在applciation.cfm的application.cfc文件末尾添加一个include,但没有成功。

2个问题。当我在Application.cfc中放置任何标准函数时,我的站点就会变成一个空白页面

下面是Application.cfc -i,如果我删除DSN设置下所有内容,它将显示该站点。

代码语言:javascript
复制
<cfcomponent output="false"> 

    <cfset This.name = "My Application"> 
    <cfset This.clientmanagement="True"> 
    <cfset This.loginstorage="Session"> 
    <cfset This.sessionmanagement="True"> 
    <cfset This.sessiontimeout="#createtimespan(0,0,10,0)#"> 
    <cfset This.applicationtimeout="#createtimespan(5,0,0,0)#">

    <cfset DSN = "dej6_42">

    <cffunction name="onApplicationStart"> 

    </cffunction> 

    <cffunction name="onApplicationEnd"> 

    </cffunction> 


    <cffunction name="onRequestStart">  

    </cffunction> 

    <cffunction name="onRequest"> 

    </cffunction> 


    <cffunction name="onRequestEnd"> 

    </cffunction> 

    <cffunction name="onSessionStart"> 

    </cffunction> 

    <cffunction name="onSessionEnd"> 

    </cffunction> 

    <cffunction name="onError"> 

    </cffunction> 



</cfcomponent>
EN

回答 2

Stack Overflow用户

发布于 2015-08-21 13:53:42

您的示例没有设置全局变量。它在变量作用域中设置了一个变量:它不能被任何基于CFC的代码访问,也不能被请求中使用的任何自定义标记访问。它将仅在Application.cfm、请求的文件、它包含的文件和OnRequestEnd.cfm中可用

Application.cfc是一个CFC (这是显而易见的),所以在其中设置的变量作用域变量只能在其中使用。如果要设置应用程序范围的变量,则需要将其放在应用程序范围内。应该在onApplicationStart)处理程序中设置应用程序范围变量,该处理程序在应用程序启动时运行一次,而不是在每次请求时运行。作为比较,Application.cfm (命名错误)在每个请求上运行。它应该被称为OnRequestStart.cfm。

因此,明确地说,在onApplicationStart中设置应用程序范围的变量如下所示:

代码语言:javascript
复制
function onApplicationStart() {
    application.DSN = "dej6_42";
}

如果使用onRequest()拦截器,且在该include中包含最初请求文件,则请求将在Application.cfc实例的上下文中运行,并且在onRequest中设置的变量将可用于其余主线请求代码,这与在Application.cfm中设置变量的方式非常相似。但是,从语义上讲,如果您的意思是一个变量在应用程序的生命周期中存在(如DSN),那么将其放入应用程序作用域是最好的选择。

在我看来,从你的问题中可以推断出,你的应用程序架构可能会在20世纪90年代衰落。我认为你应该阅读使用框架(例如:FW/1ColdBox)来以可维护和可伸缩的方式更好地组织你的代码。

此外,您还应该阅读Application.cfc (和method reference)。可能还有一般的氯氟化碳:Using ColdFusion components-Developing guide

您可能还想考虑将编写CFML的方法现代化,并将标记用于视图代码,否则将使用脚本。这使得你和其他开发人员更容易遵循代码,如果整个应用程序没有被标签弄得乱七八糟的话,他们最终可能需要维护它。

票数 5
EN

Stack Overflow用户

发布于 2015-08-21 10:50:48

您需要将其设置到应用程序范围中

代码语言:javascript
复制
<cfcomponent output="false"> 
  <cfset This.name = "My Application"> 
  <cfset This.clientmanagement="True"> 
  <cfset This.loginstorage="Session"> 
  <cfset This.sessionmanagement="True"> 
  <cfset This.sessiontimeout="#createtimespan(0,0,10,0)#"> 
  <cfset This.applicationtimeout="#createtimespan(5,0,0,0)#">
  <cfset application.DSN = 'dej6_42'>
</cfcomponent>
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32131130

复制
相关文章

相似问题

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