在使用CF application.cfc时-首先需要创建一些var(在这个作用域中)-比如this.name和this.applicationtimeout()等。
我遇到了一些我认为奇怪的行为-希望有人能解释为什么会发生这种情况,以及可能的解决方法。
有相当多的"THIS“vars可以用来设置特定于应用程序的变量(当然,你必须在CFADMIN中选中”允许特定于应用程序的变量“--我就是这么做的)
其中之一是THIS.mappings -它是一个映射数组-我的是这样的:
this.path = GetDirectoryFromPath( GetCurrentTemplatePath() );
this.mappings = {
'/files' = '#this.path#_my_files\'
,'/functions' = '#this.path#_my_functions\'
,'/logs' = '#this.path#_my_logs\'
};如果我将该脚本块放在它自己的文件中,并将其包含在application.cfc中,它就能正常工作--当它设置在application.cfc顶部的cfscript块中时,它工作得很好
然而--为了分割我的代码--我想把我所有的应用程序设置放在一个settings.cfc中……(这里的想法是,如果必须更改某些设置-我不必担心去哪里查看,我真的不想在我的app.cfc和settings.cfc中的其他应用程序或会话设置上拆分这些东西
因此,我在settings.cfc中创建了一个名为getTHIS的方法,并将脚本块放在那里……然后使用
<cfinvoke component="settings"
method="getTHIS"
returnvariable="THIS"
/>这是有效的-除了(看起来)在映射上...
this.name等似乎都正常工作并得到了设置--事实上,如果我执行一个
<cfdump var="#THIS#" label="THIS" />当我在app.cfc页面上‘逐字’设置它时,转储与它的转储完全相同。
然而,任何通过映射调用模板的尝试都会导致标准的“如果你想使用绝对路径,你必须创建一个映射之类的……”
我更大的目标是(在应用程序启动时)扫描目录中的子目录,并基于某些子目录创建映射。但如果我不能将该功能抽象为它自己的函数-我将被迫直接在app.cfc中编写它(这不会杀死我,但我再次尝试从逻辑上分割我的代码……在何时何地设置这些映射似乎是有限制的……是真的吗?
所以我想最大的问题是-我能通过外部方法设置this.mappings吗?我想我可以使用cfc调用返回‘我想要的设置’,然后只需执行'set this.whatever = return form cfc‘-(这可能是我的答案……)
谢谢
发布于 2012-08-11 00:32:03
映射只能在“伪构造函数”中设置,而不能在Application.cfc - http://adobe.ly/QN2oX1内的任何方法中设置
您可以尝试将this.mappings设置为CFC调用的结果(我想不出这为什么行不通),但如果它依赖于映射来执行此操作,那么它很可能行不通。
发布于 2012-08-11 00:43:04
我还没有测试过这一点,但我非常确定如果你的application.cfc扩展了你的settings.cfc,它将会工作。
component {
public any function getMappings() {
var mappings = {};
//code to get your directories etc.
return mappings;
}
}
component extends="settings" {
this.name = "xxxx";
this.mappings = getMappings();
...
}https://stackoverflow.com/questions/11904786
复制相似问题