这是一周的结束,很可能以下代码可以在某些方面进行改进,但总体上这种方法应该是可行的:
<cfscript>
local = {};
local.myComponentDynamic = createObject("component", "/bin/myComponent");
local.parentPathExpanded = ExpandPath("../");
local.scriptPathExpanded = ExpandPath(cgi.SCRIPT_NAME);
local.thisDirectory = GetDirectoryFromPath(Replace(local.scriptPathExpanded, local.parentPathExpanded, ""));
local.scriptPathDirectory = GetDirectoryFromPath(cgi.SCRIPT_NAME);
local.basePath = Replace(local.scriptPathDirectory, local.thisDirectory, "");
local.relativePath = "bin/myComponent";
local.myComponentSlash = createObject("component", local.basePath & local.relativePath);
local.dottedPath = Replace(local.basePath & local.relativePath, "/", ".", "ALL");
local.dottedPath = Right(local.dottedPath, Len(local.dottedPath)-1);
local.myComponentDot = createObject("component", local.dottedPath);
</cfscript>
<cfdump var="#local#">
我已将过程拆分为单独的变量并转储了公共容器,只是为了更容易阅读和理解这个例子。
但无论如何,如果您可以在Application.cfc中使用动态映射-请使用它。
编辑:我添加了这样一个例子,假设您有以下位于父文件夹中的Application.cfc(例如,如果从index.cfm查看,则为“../ Application.cfc”)。
<cfcomponent output="false">
<cfset this.mappings["/bin"] = getDirectoryFromPath(getCurrentTemplatePath()) & "bin/" />
</cfcomponent>
我的“路径转换”示例只是一种有趣的技巧和玩弄代码的方式,不是为好的应用程序提供直接的方法。