3

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

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

所以,我试图能够通过 myapp.* 映射访问此应用程序文件夹中的组件,而不必访问 rootapp.myapp.* (据我了解,此组件设置应该可以工作。

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

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

编辑:

这是我得到的确切错误:

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 处理器应该开始向上移动目录,直到找到一个。

4

2 回答 2

2

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

尝试使用此语法

<cfcomponent>
    <cfset THIS.Name = "MyApp">
    <cfset THIS.mappings = { "/myapp" = ExpandPath(".") } >
</cfcomponent>
于 2011-07-29T16:20:36.113 回答
2

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

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

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

你的cfm和cfc在同一个目录吗?(这基本上是你想要做的)

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

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

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

编辑。您在这里有两个解决方案。

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

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

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

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

ExpandPath问题在于和返回的路径之间的差异getCurrentTemplatePath()

于 2011-07-29T17:29:01.660 回答