在Coldfusion8 application.cfc中,我在哪里定义应用程序和会话变量?

时间:2012-04-28 10:58:08

标签: variables coldfusion scope coldfusion-8 application.cfc

我正在尝试设置我的第一个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事件来声明变量。如果我还需要在事件之外声明,我可以保存一行代码并声明并分配初始值?我做错了还是只是因为不是为了宣布而宣布的事件?

感谢您的投入!

1 个答案:

答案 0 :(得分:3)

“之前”是什么意思(“之前宣布一切”)?什么之前? onApplicationStart()处理程序是应用程序启动时运行的第一件事,而onSessionStart()处理程序是会话启动时运行的第一件事。因此,在建立应用程序和会话的环境中,没有“之前”。我认为您需要向我们展示更多代码:例如,一些代码表明它们“无法正常工作”。

那就是说,你没有向我们展示你的Application.cfc的伪构造函数部分,所以你不可能知道你有什么问题,如果有的话。但是你需要在会​​话开始工作之前启用会话管理,并且你可能需要在应用程序或会话变量坚持之前命名你的应用程序(尽管它们也可能只适用于无名应用程序?即使它们这样做,最好是为你的应用命名。)

最后 - 这与您的变量是否设置无关,但在设置变量时应该使用<cfset>,而不是<cfparam>。两者在这里都有相同的效果,但前者是正确的工具。