我想把我所有的CFC放到/ components文件夹中,并且能够从应用程序的不同位置调用它们,例如。来自/forums/index.cfm。
我如何设置映射?
答案 0 :(得分:9)
有多种方法可以设置映射,实际上有两种不同类型的映射:
传统的映射是通过管理员创建的,可以在CFML代码中的任何位置使用。 Railo支持此类型的每个上下文和每个服务器的映射。
还有一个每应用程序映射,可以在Application.cfc中创建,也可以通过cfapplication标记创建,可以在大多数位置使用,但是是运行时构造,所以不能在编译时使用。
此外,如果您有全局组件,您可能希望避免使用映射,只需告诉Railo组件的位置,以便您可以直接访问它们。
转到Railo管理员(即http://domain/railo-context/admin/web.cfm
),在菜单中超过一半的位置,您会找到“Archives& Resources”,其中包含“Mappings”。
在Virtual列中输入/components
,在Resource列中输入该目录的绝对路径(例如/ home / user / public_html / components),然后按保存按钮。
您还可以使用带有“updateMapping”操作的cfadmin tag以编程方式创建每个上下文映射。
(这里的所有内容也适用于每服务器映射,除了使用服务器管理员而不是Web管理员。每个服务器映射在Web Admin界面中是可见的但是只读。)
要仅为特定应用程序创建映射,可以在Application.cfc
中执行此操作只需创建一个名为this.mappings
的变量,其中包含虚拟和资源值的结构,例如:
This.Mappings = { '/components' : '/home/user/public_html/components' }
此映射只适用于该应用程序,允许您为不同的应用程序使用相同的映射点到不同的位置。
Railo还允许在Application.cfm中使用cfapplication
标记创建每个应用程序映射 - 如下所示:
<cfset MappingStruct = { '/components' : '/home/user/public_html/components' } />
<cfapplication mappings=#MappingStruct# />
注意:应用程序级映射有一些限制,因为它们存在于运行时,但不存在于编译时(因此,例如,它们不能用于自定义标记库,其中在编译模板时评估taglib属性。
其中任何一个都可以让你做到:
MyObj = createObject('component','components.NameOfFile').init()
或者:
MyObj = new components.NameOfFile()
(请注意,除非使用映射,否则不要使用/component/nameoffile
。)
如果要在不使用映射的情况下全局访问组件,请转到“组件”部分(位于菜单中的“映射”下方),然后在“其他资源”部分中输入绝对组件路径。 (保留Trusted unticked 。)
然后,您只需创建对象而无需components.
映射:
MyObj = new NameOfFile()
答案 1 :(得分:3)
您应该在Application.cfc
中定义映射。查看这些相关问题
railo application.cfc this.mappings not working
How can I include mappings into Application.cfc from external property file?