之前(和本地)我已将fusebox5目录放在Web根目录中,然后树中任何位置的应用程序都能够访问它。我之前也使用过Application.cfm而不是.cfc。
在这种环境中,我无法访问webroot,并且FB文件无论如何都不需要那么远,因此我计划将它们与应用程序一起存储。如果Application.cfc正在使用中,我认为index.cfm被忽略了,我是否正确(因此没有必要将cfinclude值改为例如../fusebox5/)?如果是这样,如何在根目录或映射中没有Fusebox的情况下包含框架?错误是:
Could not find the ColdFusion Component or Interface fusebox5.Application.
答案 0 :(得分:2)
不,您的应用仍然需要index.cfm。您需要的是Application.cfc中Fusebox的cf应用程序映射。请查看Ray Camden的Application.cfc template,了解设置应用程序特定映射的示例。
答案 1 :(得分:1)
您可以在应用根目录的子文件夹中运行Fusebox 5+。它可能不是让它成功的最明显的事情。
不幸的是,您无法为扩展Application.cfc创建动态映射,因为您的Application.cfc尚未实例化 - 您将获得鸡与蛋的情景。您无法创建到Fusebox的映射,因为您的Application.cfc没有启动,您无法启动Application.cfc,因为它无法找到它应该扩展的组件。
这是COLDFUSION中的一个BUG 8. ColdFusion应按此顺序寻找映射:
使用CreateObject()时会执行此操作,但在cfcomponent上使用Extends属性时则不会。
最简单的解决方案是像使用任何应用程序一样使用Application.cfc,然后在index.cfm中包含fusebox。您的文件夹结构如下所示:
/myapp/fusebox5/
/myapp/index.cfm
-- consists of <cfinclude template="fusebox5/fusebox5.cfm" />
只要不使用Application.cfc的OnRequest拦截请求,或者使用OnRequest,就不会忽略index.cfm文件,请确保包含预期目标(几乎总是index.cfm)反正)。
如果您不想要index.cfm来执行include,您可以让Application.cfc的OnRequest方法执行cfinclude。
<cffunction name="onRequest">
<cfinclude template="fusebox5/fusebox5.cfm">
</cffunction>
您仍然可能需要index.cfm,因此您的Web服务器不会提供目录列表或404,但如果文件为空则没问题。
答案 2 :(得分:0)
在Application.cfc中:
<cfscript>
this.mappings = {}; //create a new structure to store app-specific mappings
this.mappings["Fusebox"] = expandPath('./Fusebox'); //add mapping
</cfscript>