目前,在application.cfc中,我扩展了Fusebox 5.5 Framework。 然后在下面的OnRequestStart方法中,我根据特定条件设置fusebox模式。
问题是有时候,无论我做出什么改变,fusebox xml文件都不会重新解析。如果我使用url变量强制重新分析fusebox.parse = true& fusebox.loadclean = true& fusebox.password = xxx,则文件再次解析。
这几乎就像Fusebox仍处于生产模式,即使我转储FUSEBOX_PARAMETERS.mode它说“开发 - 满载”
可能导致这种情况的原因是什么?在下面的代码中是否正确操作保险丝盒模式的方式,或者应该在其他地方进行这种设置(显然除了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>
答案 0 :(得分:3)
请参阅FUSEBOX_PARAMETERS
存储在application
范围内,默认情况下它们包含在大容器application.fusebox
中。调用super.onApplicationStart()
时会填充Fusebox设置,因此在onRequestStart
中修改它们没有意义。
我建议将cfswitch代码移动到定义应用程序设置的组件主体中。
在onRequestStart
中,您可以强制重启应用程序以重新读取设置,可能是这样的:
<cfif StructKeyExists(attributes, "fusebox.loadapp") AND attributes["fusebox.password"] EQ application.fusebox.password>
<cfset this.onApplicationStart() /
</cfif>
请注意,fusebox.loadapp
不是内置的Fusebox属性,它仅适用于您的应用,为方便起见,只需像其他人一样加上前缀。这样您就可以重读应用程序的单例。