2009-05-21 70 views
2

以前(和本地)我已將fusebox5目錄置於Web根目錄中,然後樹中任意位置的應用程序都能夠訪問它。我以前也使用Application.cfm而不是.cfc。保險絲盒安裝無法訪問webroot

在這種環境下,我無法訪問webroot,並且FB文件並不需要太遠,所以我打算將它們一起存儲在應用程序中。我認爲如果Application.cfc在使用中(因此沒有意義將cfinclude的值改爲例如../fusebox5/),index.cfm被忽略了嗎?如果是這樣,那麼如何在不將Fusebox放在根中或映射中的情況下包含該框架?錯誤是:

Could not find the ColdFusion Component or Interface fusebox5.Application. 

回答

1

您可以在應用程序根目錄下的子目錄下運行保險絲盒5+。它可能不是最明顯的做法。

不幸的是,你不能創建一個動態映射來擴展Application.cfc,因爲你的Application.cfc還沒有被實例化 - 你會得到一個雞與蛋的情景。你不能創建到Fusebox的映射,因爲你的Application.cfc沒有啓動,你不能啓動你的Application.cfc,因爲它找不到它應該擴展的組件。

這是COLDFUSION 8. BUG的ColdFusion應該尋找映射順序:

    從CF管理員
  • 子目錄
  • 映射的文件夾斷當前目錄
  • 子目錄斷網名爲

它在您使用CreateObject()時執行此操作,但在cfcomponent上使用Extends屬性時不執行此操作。

最簡單的解決方案是像使用任何應用程序一樣使用Application.cfc,然後在index.cfm中包含保險絲盒。你的文件夾結構是這樣的:

/myapp/fusebox5/ 
/myapp/index.cfm 
    -- consists of <cfinclude template="fusebox5/fusebox5.cfm" /> 

你index.cfm文件會因爲你不攔截具有的Application.cfc的OnRequest請求不能只要忽略,或者如果你使用OnRequest,請確保您有預期的目標(無論如何,它幾乎總是index.cfm)。

如果你不想要index.cfm做include,你可以讓你的Application.cfc的OnRequest方法做cfinclude。

<cffunction name="onRequest"> 
    <cfinclude template="fusebox5/fusebox5.cfm"> 
</cffunction> 

您可能仍然需要一個index.cfm讓你的Web服務器不會給一個目錄列表或404,但如果該文件是空的它的確定。

2

不,您的應用程序仍然需要index.cfm。你需要的是你的Application.cfc中的Fusebox的cf應用程序映射。查看Ray Camden的Application.cfc template以瞭解設置應用程序特定映射的示例。

0

在的Application.cfc:

<cfscript> 
    this.mappings = {}; //create a new structure to store app-specific mappings 
    this.mappings["Fusebox"] = expandPath('./Fusebox'); //add mapping 
</cfscript> 
+1

該映射將起作用,但是如果您試圖擴展該映射中的組件(fusebox5.Application),它將會中斷。在找到擴展組件之前,您無法創建Application.cfc的實例,但在找到擴展組件之後才能找到擴展組件。失敗。 – 2009-05-21 19:00:30