我正在尝试设置我的第一个application.cfc文件。
我尝试在“基于事件”的基础上调用变量,如下所示:
<cffunction name="onApplicationStart" returnType="boolean" output="false">
<cfparam name="Application.RootDir" default="/">
<cfreturn true>
</cffunction>
<cffunction name="onSessionStart" returnType="boolean" output="false">
<cfparam name="Session.activeSession" default="Yes">
<cfparam name="Session.activeLogin" default="No">
<cfreturn true>
</cffunction>
我认为这样可以很好地工作,但事实证明,事实并非如此,因为我需要先申报所有内容,如下:
<cfparam name="Application.RootDir" default="">
<cfparam name="Session.activeSession" default="">
<cfparam name="Session.activeLogin" default="">
我的问题:
为什么我应该使用CF事件来声明变量。如果我还需要在事件之外声明,我可以保存一行代码并声明并分配初始值?我做错了还是只是因为不是为了宣布而宣布的事件?
感谢您的投入!
答案 0 :(得分:3)
“之前”是什么意思(“之前宣布一切”)?什么之前? onApplicationStart()处理程序是应用程序启动时运行的第一件事,而onSessionStart()处理程序是会话启动时运行的第一件事。因此,在建立应用程序和会话的环境中,没有“之前”。我认为您需要向我们展示更多代码:例如,一些代码表明它们“无法正常工作”。
那就是说,你没有向我们展示你的Application.cfc的伪构造函数部分,所以你不可能知道你有什么问题,如果有的话。但是你需要在会话开始工作之前启用会话管理,并且你可能需要在应用程序或会话变量坚持之前命名你的应用程序(尽管它们也可能只适用于无名应用程序?即使它们这样做,最好是为你的应用命名。)
最后 - 这与您的变量是否设置无关,但在设置变量时应该使用<cfset>
,而不是<cfparam>
。两者在这里都有相同的效果,但前者是正确的工具。