Coldfusion 如何将CFC存储在单独的目录中并使其工作?

Coldfusion 如何将CFC存储在单独的目录中并使其工作?,coldfusion,cfc,Coldfusion,Cfc,是否有方法在标记中指定组件路径 我正在为我的应用程序使用ColdFusion组件。然而,我的应用程序有几个文件夹,每次我想让CFC工作时,我必须将它保存在需要访问的文件所在的目录中。这导致我创建了几个相同的CFC文件 有没有办法将我的CFC存储在一个目录中,并使其在我的站点上运行?适用于ColdFusion 9 文件系统 文件:/app/Application.cfc 文件:/app/controllers/userscocontroller.cfc 对于ColdFusion 8 与上面一样,只

是否有方法在标记中指定组件路径

我正在为我的应用程序使用ColdFusion组件。然而,我的应用程序有几个文件夹,每次我想让CFC工作时,我必须将它保存在需要访问的文件所在的目录中。这导致我创建了几个相同的CFC文件

有没有办法将我的CFC存储在一个目录中,并使其在我的站点上运行?

适用于ColdFusion 9 文件系统 文件:
/app/Application.cfc
文件:
/app/controllers/userscocontroller.cfc
对于ColdFusion 8
与上面一样,只需使用
CreateObject
而不是
new
而不是
组件{}
,等等。

这里有一些事情可以做。我建议您将组件放在它们有意义的地方(root/com、root/models或其他什么),然后从应用程序库中引用它们

在ColdFusion管理员中,可以设置应用程序根目录的映射路径,并从该路径引用组件

myObject = createObject('component','nameOfMyMapping.models.service.answerStackOverflowQuestions');
您还可以在Application.cfm/Application.cfc中执行一些逻辑来动态查找应用程序的根。此方法不需要特殊权限,如果您将应用程序重新定位到另一个环境中,它将起作用。谷歌很快就找到了彼得·弗雷塔格(Peter Freitag)的一篇博文,其中有一个功能可以做到这一点。如果您使用的是应用程序.cfc,请务必更换.cfm

org还有一个方法,看起来它会为您找到根路径

一旦将根路径存储在变量中,事情就变得简单了

myObject = createObject('component','#myRoot#.models.service.answerStackOverflowQuestions');
最后,许多框架使得这个和许多其他常见的tak变得非常简单。您可以选择任何ColdFusion框架。有人已经发明了轮子;)


玩得开心

正如其他人所指出的,您可以使用映射和函数来定位应用程序的根,但问题的核心是通用路径规范

我建议您阅读标题为的文档中指定CFC位置的部分

本质上,它说的是,如果您的应用程序位于,并且您有一个页面希望在以下位置使用组件:

/myApp/foo/components/library/fubar.cfc
那么fubar.cfm应该这样做:

<cfset fubar=createObject("component", "myApp.foo.components.library.fubar") />
<cfset fubar = createObject("component", "components.library.fubar") />
相同的点符号路径可在
中使用,作为
组件
属性的一部分:

<cfinvoke component="components.library.fubar" ... />


请注意,CF会在CustomTags路径中搜索组件。如果您在托管计划中,并且无法创建自己的服务器映射,这将非常有用。谢谢Aaron。我发现框架对新用户来说是完全不友好的,而且我也不喜欢框架。我当时正在看Fusebox,安装过程非常混乱,我放弃了。解压文件很容易,但按照我喜欢的安装方法放置文件的说明非常不连贯,要求我将文件放在目录中,但没有明确指定它们是什么;并且要求下载到一组文件,而不解释每个文件的作用和放置位置。Mel,ColdBox框架有大量文档、一本书和大量应用程序。你甚至可以得到训练!如果您正在寻找一个框架作为开始,我会选择ColdBox。买了这本书,慢慢看一看。你不会后悔的。组件不一定以任何方式映射到URL。他们可能会,但很可能不会。最佳实践表明,组件应该移动到web可访问目录之外,除非它们是web可访问的组件。Justice和Adam,首先,非常感谢。我有一个问题:将CFC迁移到webroot之外对于共享环境来说是不现实的;我是对的吗?@正义,是的,你是对的。为了避免混淆,我故意省略了那部分@Mel,是的,共享托管环境通常不提供将组件移动到web根目录之外的好方法。这可能取决于共享环境。例如,如果在您的共享环境中,您的目录位于
/home/Justice/code/
,但您也被允许为您的帐户指定从该目录到webroot的相对路径,如
app/
将您的webroot放在
/home/Justice/code/app/
,则您可以这样做。如果您坚持认为帐户webroot与帐户root相同,那么您就必须将CFC放在webroot中。Justice,非常感谢您花时间概述代码。
<cfset fubar=createObject("component", "myApp.foo.components.library.fubar") />
<cfset fubar = createObject("component", "components.library.fubar") />
<cfinvoke component="components.library.fubar" ... />