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

Moh*_*mad 8 coldfusion cfc

有没有办法在标签中指定组件路径?

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

有没有办法将我的CFC存储在一个目录中,并使其在我的网站上工作?

Ada*_*tle 10

正如其他人所指出的那样,你可以使用定位应用程序根目录的映射和函数来做有趣的事情,但问题的核心是通用路径规范.

我建议您阅读名为" 指定CFC位置 " 的" 使用ColdFusion组件"文档部分.

从本质上讲,它说的是,如果您的应用程序住在http://example.com/myApp/,你必须在一个页面http://example.com/myApp/foo/bar/fubar.cfm想要使用的组件在:

/myApp/foo/components/library/fubar.cfc
Run Code Online (Sandbox Code Playgroud)

然后fubar.cfm应该做这样的事情:

<cfset fubar=createObject("component", "myApp.foo.components.library.fubar") />
Run Code Online (Sandbox Code Playgroud)

您获取文件的路径并用点替换斜杠(也称为"点符号"),并从要加载的组件的文件名中删除".cfc".

此外,您可以使用命名映射(如Aaron所描述的),因此如果您创建一个/components指向的映射,/myApp/foo/components/那么您的createObject调用将如下所示:

<cfset fubar = createObject("component", "components.library.fubar") />
Run Code Online (Sandbox Code Playgroud)

<cfinvoke />作为component属性的一部分,可以使用相同的点符号路径:

<cfinvoke component="components.library.fubar" ... />
Run Code Online (Sandbox Code Playgroud)


Aar*_*lee 6

你可以在这里做一些事情.我建议你将组件放在合理的位置(root/com,root/models,或其他),然后从你的应用程序库中引用它们.

在ColdFusion管理员中,您可以设置Application根的映射路径,并从该路径引用组件.

myObject = createObject('component','nameOfMyMapping.models.service.answerStackOverflowQuestions');
Run Code Online (Sandbox Code Playgroud)

您还可以在Application.cfm/Application.cfc中执行某些逻辑,以动态查找应用程序的根目录.此方法不需要特殊权限,并且如果您将应用程序重定位到另一个环境,则可以使用此方法.一个快速的谷歌出现了由Peter Freitag撰写的一篇博文,其功能就是这样做的.如果您使用的是Application .cfc,请务必更换.cfm.http://www.petefreitag.com/item/630.cfm

CFLib.org也有一个方法,看起来它会找到你的根路径.http://www.cflib.org/udf/GetRootPath

一旦将根路径存储在变量中,事情就变得容易了.

myObject = createObject('component','#myRoot#.models.service.answerStackOverflowQuestions');
Run Code Online (Sandbox Code Playgroud)

最后,许多框架已经使这个以及许多其他常见的东西变得非常简单.您可以选择任何ColdFusion框架.有人已经发明了轮子;).

玩得开心!