2011-05-08 112 views
1

目前,在application.cfc中,我擴展了Fusebox 5.5框架。 然後在下面的OnRequestStart方法中,我根據一定的條件設置保險絲盒模式。保險絲盒不解析xml文件

問題是,有時,fusebox xml文件不會重新解析,無論我做出什麼改變。如果我使用url變量強制重新分析fusebox.parse = true & fusebox.loadclean = true & fusebox.password = xxx然後文件再次解析。

這幾乎就像保險絲盒仍然在生產模式下,即使當我放棄它說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> 

回答

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沒有內置保險絲盒屬性,它只會工作,爲您的應用程序,只需爲方便起見,像其他人一樣加前綴。這樣你可以重讀你的應用程序的單例。

+0

感謝您的回覆 - 我懷疑它與應用範圍有關。 因此,如果我在調用之前將代碼放入onApplicationStart方法中, – Cheeky 2011-05-08 13:26:59

+0

@ Cheeky,你的意思是把你的代碼,對吧?我認爲''may'也可以在'onApplicationStart'上工作,但是你至少需要做兩件事:(1)在那之後執行'super.onApplicationStart()'; (2)以某種方式強制應用程序重新啓動,除非它在超時之前不會被觸發。另外,我不認爲'FUSEBOX_PARAMETERS'會在'onApplicationStart'裏面工作,可能你應該試試'application.fusebox'格式。但最簡單的解決辦法就是按照我在答案中提出的方式去做。 – Sergii 2011-05-08 14:26:24

+0

@Sergii:請介紹一下「我建議將cfswitch代碼移到定義應用程序設置的組件主體中」。在此應用程序中,所有設置均在fusebox.init或appliction.cfc中定義。應用程序設置沒有單獨的CFC。謝謝@ Sergii:請介紹一下「我建議將cfswitch代碼移到定義應用程序設置的組件主體中」。在此應用程序中,所有設置均在fusebox.init或appliction.cfc中定義。應用程序設置沒有單獨的CFC。所以也許在fusebox.init放置開關,t – Cheeky 2011-05-12 05:58:16