2个问题-
在application.cfm的CF8中,我可以像这样设置全局变量
<cfset DSN = "dej6_42">我现在正在尝试调整到CF10/Lucee中的Application.cfc,但不知道如何设置这个相同的变量。
这是我当前的Application.cfc
<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>我试过了
<cfset This.DSN = "dej6_42">然后尝试在单独的页面中调用
<cfoutput>#Applicaton.DSN#</cfoutput>我认为从我的研究来看,我需要同时使用application.cfc和application.cfm来完成上述任务。*编辑-我尝试在applciation.cfm的application.cfc文件末尾添加一个include,但没有成功。
2个问题。当我在Application.cfc中放置任何标准函数时,我的站点就会变成一个空白页面
下面是Application.cfc -i,如果我删除DSN设置下所有内容,它将显示该站点。
<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>发布于 2015-08-21 13:53:42
您的示例没有设置全局变量。它在变量作用域中设置了一个变量:它不能被任何基于CFC的代码访问,也不能被请求中使用的任何自定义标记访问。它将仅在Application.cfm、请求的文件、它包含的文件和OnRequestEnd.cfm中可用
Application.cfc是一个CFC (这是显而易见的),所以在其中设置的变量作用域变量只能在其中使用。如果要设置应用程序范围的变量,则需要将其放在应用程序范围内。应该在onApplicationStart)处理程序中设置应用程序范围变量,该处理程序在应用程序启动时运行一次,而不是在每次请求时运行。作为比较,Application.cfm (命名错误)在每个请求上运行。它应该被称为OnRequestStart.cfm。
因此,明确地说,在onApplicationStart中设置应用程序范围的变量如下所示:
function onApplicationStart() {
application.DSN = "dej6_42";
}如果使用onRequest()拦截器,且在该include中包含最初请求文件,则请求将在Application.cfc实例的上下文中运行,并且在onRequest中设置的变量将可用于其余主线请求代码,这与在Application.cfm中设置变量的方式非常相似。但是,从语义上讲,如果您的意思是一个变量在应用程序的生命周期中存在(如DSN),那么将其放入应用程序作用域是最好的选择。
在我看来,从你的问题中可以推断出,你的应用程序架构可能会在20世纪90年代衰落。我认为你应该阅读使用框架(例如:FW/1或ColdBox)来以可维护和可伸缩的方式更好地组织你的代码。
此外,您还应该阅读Application.cfc (和method reference)。可能还有一般的氯氟化碳:Using ColdFusion components-Developing guide。
您可能还想考虑将编写CFML的方法现代化,并将标记用于视图代码,否则将使用脚本。这使得你和其他开发人员更容易遵循代码,如果整个应用程序没有被标签弄得乱七八糟的话,他们最终可能需要维护它。
发布于 2015-08-21 10:50:48
您需要将其设置到应用程序范围中
<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>https://stackoverflow.com/questions/32131130
复制相似问题