2015-10-12 147 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。但我不确定在这种情况下,这对你有效。

相关问题