10

我想在不同的目录中扩展 CFC,我有几个选项,但不知道如何做到这一点:

A)使用动态映射(这必须是基于站点的动态映射,例如,对于实时站点,它将是 cfc.myPackage.MyCFC,但在开发站点上它将是 myCfcRoot.myPackage.MyCFC) - 我已经尝试过将表达式放入扩展位,但显然 CF 不喜欢这样,例如:

<cfcomponent name="MyComponent" extends="#config.cfcRoot#.BaseComponent">

或者

<cfcomponent name="MyComponent" extends="#GetRealPath(../BaseComponent.cfc)#">

B) 提供 CFC 的相对路径(以某种方式)以进行扩展。

我担心我做不到,但我希望我错过了一些东西。

4

4 回答 4

11

丹尼尔基本上是正确的,你需要一个映射。但是,有 3 种解决方法。

CFC 会选择当前路径作为相对根映射,所以如果你的 CFC 都在同一个目录中,你可以说

<cfcomponent name="MyComponent" extends="Example">

或者,如果您的组件位于当前 cfc 的子目录中,您可以访问它:

<cfcomponent name="MyComponent" extends="subdirectory.Example">  

其次,如果您在 ColdFusion 8 上运行,您可以使用如下映射结构在 application.cfc 中定义映射:

<cfset this.mappings["/MyApp"] = expandPath(".") />

Application.cfc 有两个很好的参考,第一个是Ray Camden 的示例 Application.cfc,它只是提供了一个很好的视图去哪里,然后是CF8 Live Docs 应用程序设置页面,其中有一个关于映射的部分以及一些很好的评论。

最后,您可以使用 Web 根目录的内置映射,因此如果您的应用程序位于 Web 根目录之外的名为“MyApp”的子目录中,那么您的根映射将是“MyApp”。假设您正确地将组件放入:

wwwroot\MyApp\com\MyApp\example.cfc

在这种情况下,到此 cfc 的映射将是:

MyApp.com.MyApp.Example

并使用您的示例,您可以像这样扩展:

<cfcomponent name="MyComponent" extends="MyApp.com.MyApp.Example">

其他任何事情,例如您的组件是否位于 Web 根目录之外,或者您不确定已完成应用程序的文件夹结构是什么,您需要在 CF Administrator 中设置映射。

于 2008-11-13T16:10:36.167 回答
3

现在这仅在 cf8 中进行了测试,因此其他引擎可能会有所不同。

如果您想使用相对路径来扩展应用程序,您可以,但您必须以“ /. ”开头。例如,您可以这样做将 application.cfc 从您的 Web 根目录扩展到您的 Web 根目录下的目录:

<cfcomponent output="false" extends="/.application">
 <!--- whatever code you have --->
</cfcomponent>

现在假设我的应用程序中有以下路径:

[webroot]/1/1a
[webroot]/2

假设[webroot]/1/1a中的 application.cfc 扩展了[webroot]中的 application.cfc 。现在我想在 [webroot]/2 中放置一个 application.cfc并在[webroot]/1/1a中扩展 application.cfc 。我在我的 [webroot]/2/application.cfc 中要做的所有事情如下:

<cfcomponent output="false" extends="/./1/1a/application">
 <!--- whatever code you have --->
</cfcomponent>

希望这是有道理的。

于 2008-11-18T21:59:53.760 回答
2

除非 CFC 与调用脚本位于同一目录中,否则必须从相对于“映射”的路径定位和引用 CFC。

我发现有时您需要确保将“/”映射到您的网络服务器的文档根目录,并成为所有相对路径的基础。或者,您可以为包含所有常用 CFC 的 CFC 目录设置映射。

此屏幕位于 ColdFusion Admin 中的“服务器设置”->“映射”下。

于 2008-11-13T15:18:37.473 回答
0

关于方法 B。可以在您的示例中使用附加文件来完成。对于每个要扩展的目录,每个 cfc 都有一个额外的文件。

所需的 3 个文件。

  • /somepathtobasecomponent/basecomponent.cfc(您的基本组件文件)
  • /pathtoworkingcfc/function.cfc(具有扩展属性的文件)
  • /pathtoworkingcfc/basecomponent_extend.cfc(将进行扩展的新文件)

/somepathtobasecomponent/basecomponent.cfc

这里没什么可改变的。这保持不变。

/pathtoworkingcfc/function.cfc

cffunction标签集中延伸到extends="basecomponent_extend"

/pathtoworkingcfc/basecomponent_extend.cfc

文件的唯一内容是cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">
于 2012-07-05T12:23:40.933 回答