2

我正在尝试设置我的第一个 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 事件来声明变量。如果我无论如何都需要在事件之外声明,我可以为自己节省一行代码并声明并分配初始值?我是不是做错了,或者事件只是为了断言而不是为了声明?

感谢您的输入!

4

1 回答 1

3

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

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

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

于 2012-04-28T12:37:09.257 回答