在使用 CF application.cfc - 需要创建一些变量以开始(在 THIS 范围内) - 例如 this.name 和 this.applicationtimeout() 等。
我遇到了一些我认为奇怪的行为 - 希望有人能解释为什么会发生这种情况以及可能的解决方法。
有相当多的“THIS”变量被接受,可以用来设置应用程序特定的变量(当然你必须在 CFADMIN 中检查“允许应用程序特定的变量”——我做了)
其中之一是 THIS.mappings - 这是一个映射数组 - MINE 看起来像这样:
this.path = GetDirectoryFromPath( GetCurrentTemplatePath() );
this.mappings = {
'/files' = '#this.path#_my_files\'
,'/functions' = '#this.path#_my_functions\'
,'/logs' = '#this.path#_my_logs\'
};
它工作正常 - 当它设置在 application.cfc 顶部的 cfscript 块内时,它工作正常 - 如果我将该脚本块放在它自己的文件中并将其 cfinclude 到 application.cfc
但是 - 为了分割我的代码 - 我想将我的所有应用程序设置放在 settings.cfc ...(这里的想法是如果必须更改某些设置 - 我不必担心'在哪里' 看,我真的不想在我的 app.cfc 和 settings.cfc 中的其他应用程序或会话设置上拆分这些东西
所以我在 settings.cfc 中创建了一个名为 getTHIS 的方法,并将脚本块放在那里......然后使用
<cfinvoke component="settings"
method="getTHIS"
returnvariable="THIS"
/>
哪个 WORKS - 除了(似乎)在映射上......
this.name 等似乎都可以正常工作并被设置 - 事实上,如果我做一个
<cfdump var="#THIS#" label="THIS" />
当我在 app.cfc 页面上“逐字地”设置它时,转储与 THIS 的转储相同。
但是 - 任何通过映射调用模板的尝试 - 都会导致标准“如果你想使用绝对路径,你必须创建一个映射等等等等......”
我更大的目标是(在应用程序启动时)扫描目录中的子目录,并根据某些子目录创建映射。但如果我不能将该功能抽象为它自己的功能 - 我将被迫直接在 app.cfc 中编写它(这不会杀死我,但我再次尝试对我的代码进行逻辑分段......似乎可以设置这些映射的时间和地点有限制......真的吗?
所以我想最大的问题是 - 我可以通过外部方法设置 this.mappings 吗?我想我可以使用 cfc 调用恢复“我想要的设置”,然后执行“设置 this.whatever = return form cfc” - (这可能是我的答案......)
谢谢