railo application.cfc this.mappings无效

时间:2011-07-29 15:43:00

标签: coldfusion components railo mappings application.cfc

我正在使用最新版本的railo,并且我正在尝试使每个应用程序映射正常工作。这就是我在做的事情:

<cfcomponent name="MyApp">
    <cfset THIS.Name = "MyApp">
    <cfset THIS.Mappings["/myapp"] = ExpandPath(".")>
</cfcomponent>

所以,我试图通过myapp。*映射来访问此应用程序文件夹中的组件,而不是必须访问rootapp.myapp。*(据我所知,这个组件设置应该可以工作。

但是,此映射无法访问我的组件,当我在代码中对应用程序变量执行cfdump时,它将显示“applicationname”设置为“MyApp”,但没有显示映射。

铁路不支持这些映射,还是我做错了什么?

编辑:

这是我得到的确切错误:

invalid component definition, can't find myapp.data.MyObject

应该已经进行myapp映射,并且MyObject确实存在。这是我的结构:

/rootfolder/myapp/Application.cfc
/rootfolder/myapp/data/MyObject.cfc
/rootfolder/myapp/pages/MyPage.cfm

简而言之,“MyPage.cfm”依赖于映射来轻松访问“MyObject”组件。应该加载Application.cfc ,因为cfml处理器应该开始向上移动目录,直到找到它为止。

2 个答案:

答案 0 :(得分:2)

更新:正如Sergii指出的那样,语法是有效的,但净效果是一样的。

尝试使用此语法

<cfcomponent>
    <cfset THIS.Name = "MyApp">
    <cfset THIS.mappings = { "/myapp" = ExpandPath(".") } >
</cfcomponent>

答案 1 :(得分:2)

你的语法没问题,我刚刚对目录树中的应用程序做了同样的工作,它运行正常。

  

但是,此映射无法访问我的组件,

究竟是什么错误? “组件定义无效,找不到myapp.xyz”?

您的cfm和cfc在同一目录中吗? (这基本上就是你要做的事情)

  

当我在我的代码中对应用程序变量执行cfdump时,它会显示“applicationname”设置为“MyApp”,但没有显示映射。

您不会通过转储应用程序范围来查看此信息。唯一的选择是像往常一样使用Application.cfc。

<cfset app = CreateObject("component",  "application") />
<cfdump var="#app#">

EDIT。你有两个解决方案。

定义这样的映射,因此将为Application.cfc计算路径:

<cfset this.mappings["/myapp2"] = getDirectoryFromPath(getCurrentTemplatePath())>

或者像这样更改组件路径:

<cfset MyObject = CreateObject("component",  "myapp.data.MyObject") />

问题在于ExpandPathgetCurrentTemplatePath()返回的路径之间存在差异。