使用相对路径扩展CFC

时间:2008-11-13 15:11:45

标签: coldfusion cfc

我想在不同的目录中扩展CFC,我有几个选项,但无法弄清楚如何执行此操作:

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

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

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

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

我担心我不能这样做,但我希望有一些我错过的东西。

4 个答案:

答案 0 :(得分:10)

Daniel基本上是正确的,你需要一个映射。但是,有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's example Application.cfc,它只是给出了一个很好的视图,然后是CF8 Live Docs application settings页面,其中有一个关于映射的部分以及一些好的评论。

最后,您可以使用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管理员中设置映射。

答案 1 :(得分:2)

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

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

此屏幕位于“服务器设置”下的ColdFusion管理员中 - &gt; “映射”。

答案 2 :(得分:2)

现在这只在cf8中测试过,因此其他引擎可能会有所不同。

如果您想使用相对路径扩展应用程序,则必须使用“ /。”启动它们。例如,您可以将application.cfc从Web根目录扩展到webroot下面的目录:

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

现在让我说我的应用程序中有以下路径:

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

让我们说 [webroot] / 1 / 1a 中的application.cfc扩展了 [webroot] 中的application.cfc。现在我想将application.cfc放在 [webroot] / 2 中,并在 [webroot] / 1 / 1a 中扩展application.cfc。我在[webroot] /2/application.cfc中要做的就是以下内容:

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

希望这是有道理的。

答案 3 :(得分:0)

关于方法B.可以使用示例中的附加文件来完成。这是每个cfc的一个额外文件,您希望根据要扩展的目录进行扩展。

所需的3个文件。

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

<强> /somepathtobasecomponent/basecomponent.cfc

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

<强> /pathtoworkingcfc/function.cfc

cffunction代码中的

将延伸设置为extends="basecomponent_extend"

<强> /pathtoworkingcfc/basecomponent_extend.cfc

文件的唯一内容是cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">