1

目前,在 application.cfc 中,我扩展了 Fusebox 5.5 框架。然后在下面的 OnRequestStart 方法中,我根据某个条件设置了 fusebox 模式。

问题是有时,无论我进行什么更改,fusebox xml 文件都不会重新解析。如果我使用 url 变量 fusebox.parse=true&fusebox.loadclean=true&fusebox.password=xxx 强制重新解析,那么文件会再次解析。

即使我转储 FUSEBOX_PARAMETERS.mode 它说“开发-满载”,这几乎就像 Fusebox 仍处于生产模式

这可能是什么原因造成的?在下面的代码中操作 fusebox 模式的方式是正确的,还是应该在其他地方进行这种设置(显然除了 fusebox.xml)?

任何帮助都会很棒。谢谢

 <cffunction name="onRequestStart">
    <cfset variables.server_type = "Development" />

    <cfswitch expression="#variables.server_type#">
        <cfcase value="development">
            <cfset FUSEBOX_PARAMETERS.mode = "development-circuit-load" />
            <cfset FUSEBOX_PARAMETERS.debug = true />
            <cfset request.component_reload = true />
        </cfcase>
        <cfdefaultcase>
            <cfset FUSEBOX_PARAMETERS.mode = "production" />
            <cfset FUSEBOX_PARAMETERS.debug = false />
            <cfset request.component_reload = false />
        </cfdefaultcase>
    </cfswitch>
    <cfif (StructKeyExists(attributes, "fusebox.loadapp") AND attributes.fusebox.password EQ application.fusebox.password) OR FUSEBOX_PARAMETERS.mode NEQ application.fusebox.mode>
        <cfset this.onApplicationStart() />
    </cfif> 

    <cfset superReturn = super.onRequestStart(arguments.1) />
</cffunction>
4

1 回答 1

3

看,FUSEBOX_PARAMETERS存储在application范围内,默认情况下它们包含在巨大的容器中application.fusebox。调用时会填充保险丝盒设置super.onApplicationStart(),因此修改它们onRequestStart没有意义。

我建议将您的 cfswitch 代码移动到您定义应用程序设置的组件主体中。

您可以强制应用程序重新启动以onRequestStart重新读取设置,可能是这样的:

<cfif StructKeyExists(attributes, "fusebox.loadapp") AND attributes["fusebox.password"] EQ application.fusebox.password>
    <cfset this.onApplicationStart() /
</cfif>

请注意,这fusebox.loadapp不是内置的 Fusebox 属性,它仅适用于您的应用程序,为方便起见,只需像其他人一样添加前缀。通过这种方式,您可以重新读取应用程序的单音。

于 2011-05-08T13:10:12.703 回答