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来完成上述工作。 *编辑 - 我试图在application.cfc文件的末尾添加一个include到applciation.cfm,但它没有用。
2问题。 当我在Application.cfc中放置任何标准函数时,我的网站将变为空白页
这是Application.cfc - 如果我删除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>
答案 0 :(得分:5)
您的示例未设置全局变量。它在变量范围中设置变量:任何基于CFC的代码都不能访问它,也不能在请求中使用任何自定义标记。它只能在Application.cfm,请求的文件,它包含的文件和OnRequestEnd.cfm
中提供。 Application.cfc是一个CFC(陈述显而易见的),因此在其中设置的变量范围变量仅在其中可用。如果要设置应用程序范围的变量,则需要将其放在应用程序范围内。应用程序范围变量应在onApplicationStart)
处理程序中设置,该处理程序在应用程序启动时运行一次,但不在每个请求上运行。通过比较,每个请求都会运行Application.cfm(名称错误)。它应该被称为OnRequestStart.cfm。
所以要明确的是,在onApplicationStart
中设置应用程序范围的变量就是这样:
function onApplicationStart() {
application.DSN = "dej6_42";
}
如果您使用onRequest()
拦截器,并且在include
最初请求的文件中,则请求将在Application.cfc实例的上下文中运行,并且变量设置在{{1其他主线请求代码可以使用,就像在Application.cfm中设置变量的方式一样。但从语义上讲,如果你的意思是在应用程序的生命周期中存在一个变量(比如DSN),那么将它放在应用程序范围内是最好的选择。
对我来说,从您的问题可以看出您的应用程序架构可能在20世纪90年代萎靡不振。我认为您应该阅读使用框架(例如:FW/1或ColdBox)以便以可维护和可扩展的方式更好地组织代码。
另外,您应该阅读Application.cfc(和method reference)。通常可能是CFC:Using ColdFusion components-Developing guide。
您也可能想要考虑现代化编写CFML的方法,并为视图代码备份标记,否则使用脚本。它使您和其他开发人员更容易理解代码,如果整个应用程序没有使用标签混乱,他们可能最终需要维护它。
答案 1 :(得分:3)
您需要将其设置为应用程序范围
<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>