我想在不同的目录中扩展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提供相对路径(以某种方式)以进行扩展。
我担心我不能这样做,但我希望有一些我错过的东西。
答案 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 强>
cffunction
代码中的将延伸设置为extends="basecomponent_extend"
<强> /pathtoworkingcfc/basecomponent_extend.cfc 强>
文件的唯一内容是cfinclude
<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">