2

以前(和本地)我将 fusebox5 目录放在 web 根目录中,然后树中任何位置的应用程序都可以访问它。我以前也使用 Application.cfm 而不是 .cfc。

在这种环境下,我无法访问 webroot,而且 FB 文件也不需要那么远,所以我计划将它们与应用程序一起存储。如果正在使用 Application.cfc,我是否认为 index.cfm 会被忽略(因此将 cfinclude 值更改为例如../fusebox5/ 没有意义)?如果是这样,如何在根目录或映射中不包含 Fusebox 的情况下包含框架?错误是:

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

3 回答 3

2

不,您的应用仍然需要 index.cfm。您需要的是 Application.cfc 中 Fusebox 的 cf 应用程序映射。查看 Ray Camden 的Application.cfc 模板以获取设置应用程序特定映射的示例。

于 2009-05-21T10:57:49.673 回答
1

您可以在应用根目录的子文件夹中运行 Fusebox 5+。让它发挥作用可能不是最明显的事情。

不幸的是,您无法为扩展 Application.cfc 创建动态映射,因为您的 Application.cfc 尚未实例化 - 您将获得鸡与蛋的场景。你不能创建到 Fusebox 的映射,因为你的 Application.cfc 没有启动,你不能启动你的 Application.cfc 因为它找不到它应该扩展的组件。

这是 COLDFUSION 8 中的一个错误。ColdFusion 应按以下顺序查找映射:

  • 来自 CF 管理员的映射文件夹
  • 当前目录之外的子目录
  • Web 根目录下的子目录称为

它在您使用 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 执行包含,您可以让 Application.cfc 的 OnRequest 方法执行 cfinclude。

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

您仍然可能需要 index.cfm,这样您的 Web 服务器就不会提供目录列表或 404,但如果文件为空也可以。

于 2009-05-21T18:52:39.963 回答
0

在 Application.cfc 中:

<cfscript>
    this.mappings = {}; //create a new structure to store app-specific mappings
    this.mappings["Fusebox"] = expandPath('./Fusebox'); //add mapping
</cfscript>
于 2009-05-21T17:19:07.937 回答