我正在使用最新版本的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处理器应该开始向上移动目录,直到找到它为止。
答案 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") />
问题在于ExpandPath
和getCurrentTemplatePath()
返回的路径之间存在差异。