Mar*_*art 2 coldfusion railo application.cfc coldfusion-10
2个问题 -
在application.cfm的CF8中,我冷设置了一个全局变量
<cfset DSN = "dej6_42">
Run Code Online (Sandbox Code Playgroud)
我现在正在尝试调整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>
Run Code Online (Sandbox Code Playgroud)
我试过了
<cfset This.DSN = "dej6_42">
Run Code Online (Sandbox Code Playgroud)
然后尝试在单独的页面中调用
<cfoutput>#Applicaton.DSN#</cfoutput>
Run Code Online (Sandbox Code Playgroud)
我想从我的研究中我需要同时使用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>
Run Code Online (Sandbox Code Playgroud)
您的示例未设置全局变量.它在变量范围中设置变量:任何基于CFC的代码都不能访问它,也不能在请求中使用任何自定义标记.它只能在Application.cfm,请求的文件,它包含的文件和OnRequestEnd.cfm中使用.
Application.cfc是一个CFC(说明显而易见),因此在其中设置的变量范围变量只能在其中使用.如果要设置应用程序范围的变量,则需要将其放在应用程序范围内.应用程序范围变量应onApplicationStart)在应用程序启动时运行一次的处理程序中设置,但不应在每个请求上运行.通过比较,每个请求都会运行Application.cfm(名称错误).它应该被称为OnRequestStart.cfm.
所以要明确的是,设置应用程序范围的变量onApplicationStart将如此:
function onApplicationStart() {
application.DSN = "dej6_42";
}
Run Code Online (Sandbox Code Playgroud)
如果您使用onRequest()拦截器,并且在include最初请求的文件中,则请求将在Application.cfc实例的上下文中运行,并且其中设置的变量onRequest将可用于主线请求代码的其余部分,就像方式一样在Application.cfm中设置变量.但从语义上讲,如果您指的是应用程序生命周期中存在的变量(如DSN),那么将其置于应用程序范围内是最好的选择.
从你的问题可以推断出你的应用程序架构可能在20世纪90年代萎靡不振,这听起来对我来说.我认为您应该阅读使用框架(例如:FW/1或ColdBox)以便以可维护和可扩展的方式更好地组织代码.
您还应该阅读Application.cfc(以及方法参考).通常可能是CFC:使用ColdFusion组件 - 开发指南.
您也可能想要考虑使您的方法现代化以编写CFML并为视图代码保留标记,否则使用脚本.它使您和其他开发人员更容易遵循代码,如果整个应用程序没有使用标签混乱,他们可能最终需要维护它.
| 归档时间: |
|
| 查看次数: |
3481 次 |
| 最近记录: |