2015-10-12 59 views
2

按照標題 - ColdFusion中可以有一個休息組件,訪問Application作用域?我最初的測試似乎表明它不能,但是它肯定可以在Railo/Lucee--所以我想知道如果我做錯了什麼?休息組件是否可以訪問應用程序範圍?

當然可以爭辯說,沒有CFC應該訪問Application範圍,因爲它打破了封裝,但我認爲REST組件是少數需要的實例之一。

什麼似乎很奇怪的是,如果我試圖返回Application作用域不存在變數,我收到消息,我期望:

Element FOO is undefined in APPLICATION. 

而如果我試圖返回Application作用域變量確實存在,我得到以下 - 這表明Application範圍是在這種情況下不可用:

Variable APPLICATION is undefined. 

在這一點上,問題是發irly moot - CF的REST實現非常複雜,我認爲我即將轉向Taffy--但是Railo/Lucee的作品如此出色以至於我不能打折我弄亂了某些東西的可能性。

這裏的一些測試代碼,對於那些誰可能會感興趣:

<cfcomponent 
    output  = "false" 
    rest  = "true" 
    restpath = "/hello/" 
    > 

    <cffunction 
     name   = "world" 
     returntype  = "string" 
     httpmethod  = "GET" 
     access   = "remote" 
     > 

     <cfreturn Application.Foo /> 

    </cffunction> 

</cfcomponent> 
+0

我想錯誤消息'元素FOO在應用程序中是未定義的「是一個紅色的鯡魚。如果你調用一個未定義的變量,例如'foo.bar',錯誤信息將會是'Element BAR在FOO中未定義「。你的Application.cfc看起來像什麼,並且是該應用程序的一部分(在路徑中)? –

+0

不夠公平... 該路徑可能是一個問題,它位於web根目錄以外的所有其他CFC中,並且具有到它的映射。我現在無法訪問回購協議,但聽起來可能是問題所在。我沒有意識到它必須在web根目錄下,但是現在我想到了它我猜如果遠程實例化的CFC知道它屬於哪個應用程序? –

+0

的確,這是問題所在。如果我把它放在webroot下,工作正常。我曾想過,因爲我在Application.cfc中設置了REST文件夾,所以它可以將它與該應用程序相關聯,或者至少在該上下文中調用它,但可惜它似乎不是。 感謝您的建議! –

回答

0

從註釋

促進我認爲錯誤消息Element FOO is undefined in APPLICATION是一個紅色的鯡魚。如果您調用一個未定義的結構變量(如foo.bar),則錯誤消息將爲Element BAR is undefined in FOO。在你的情況下,它看起來像應用程序範圍,但我不認爲它是真的。

cfc位於與您的Application.cfc文件相關的位置(在路徑中)?請記住,ColdFusion將在被調用模板的相同文件夾中查找Application.cfc文件,如果未找到,將開始查找目錄樹。如果您的cfc不在Application.cfc文件的層次結構中,那麼它將不會成爲該應用程序的一部分,正如ColdFusion所看到的那樣。 Here is some more information on this feature from Charlie Arehart

您也可以使用未命名的應用程序。 Here is some documentation on that functionality。但我不確定在這種情況下,這對你有效。

相關問題