在 Coldfusion8 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 事件来声明变量。如果我无论如何都需要在事件之外声明,我可以为自己保存一行代码并声明和分配初始值吗?我做错了还是事件只是为了断言而不是为了声明?

感谢您的输入!

"之前"("声明之前的所有内容")是什么意思? 在什么之前? onApplicationStart() 处理程序是应用程序启动时运行的第一件事,onSessionStart() 处理程序是会话启动时运行的第一个事物。 因此,在建立应用程序和会话的上下文中,没有"之前"。 我认为您需要向我们展示更多代码:例如一些演示它们"不起作用"的代码。

也就是说,您

没有向我们展示Application.cfc的伪构造函数部分,因此无法判断您在那里遇到了什么问题(如果有的话)。 但是您需要在会话工作之前启用会话管理,并且您可能需要在应用程序或会话变量保留之前命名您的应用程序(尽管它们也可能仅适用于无名称应用程序?即使他们这样做,最好命名你的应用)。

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

最新更新