2009-05-21 53 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