如何在 CreateObject 参数中添加带点的路径

Die*_*ius 3 coldfusion coldfusion-11

我正在尝试从我的组件导入路径,但一个文件夹有多个点,例如board.event.calendar. 由于这是此代码库中的常规结构,因此我无法更改文件夹名称。我尝试了多种方法来实现 CreatObject 参数中的正确路径,例如:

<cfset Event = CreateObject("Component", "path.to.'board.event.calendar'.Event") />
<cfset Event = CreateObject("Component", "path/to/'board.event.calendar'/Event") />
<cfset Event = CreateObject("Component", "path\to\'board.event.calendar'\Event") />
<cfset Event = CreateObject("Component", "path.to.board#chr(046)#event#chr(046)#calendar.Event") />
Run Code Online (Sandbox Code Playgroud)

但到目前为止还没有运气。我该如何处理?

Red*_*pia 5

CreateObject()使用句点字符作为路径中的分隔符,并且不会接受无效字符,例如单引号(如上面的示例所示)。

执行此操作的一种方法是创建映射,然后在路径中使用它。例如,如果应用程序的路径为C:\dev\myapp\,日历 CFC 的路径为C:\dev\myapp\calendar\,则您可以在文件中创建一个映射,application.cfc如下所示:

this.mappings = {
    "/app": "C:/dev/myapp/",
    "/calendar: "C:/dev/myapp/calendar/"
}
Run Code Online (Sandbox Code Playgroud)

(您也可以在CF管理员中创建映射)

然后在创建组件时,您可以使用:

myComponent = createObject("app.calendar.event").init();
Run Code Online (Sandbox Code Playgroud)

或者

myComponent = createObject("calendar.event").init();
Run Code Online (Sandbox Code Playgroud)

  • 该死,太慢了;-) 假设是最新版本,您还可以使用更新的语法而不是`createObject()`,例如。`myComponent = new Calendar.Event()`。 (2认同)