ColdFusion Application.cfc& cfinvoke&这个范围

时间:2012-08-10 15:27:40

标签: coldfusion coldfusion-10 application.cfc cfinvoke

在使用CF application.cfc时 - 需要创建一些vars(在本范围内) - 例如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块中时 它工作正常 - 如果我把那个脚本块放在它自己的文件中并在application.cfc中包含它

然而 - 在尝试细分我的代码时 - 我想将我的所有应用程序设置放在settings.cfc中......(这里的想法是因为某些设置必须改变 - 我不必担心关于'在哪里'看,我真的不想在我的app.cfc和settings.cfc中的其他应用程序或会话设置上拆分这些东西

所以我在settings.cfc中创建了一个名为getTHIS的方法,然后我将脚本块放在那里......然后使用

<cfinvoke component="settings"
          method="getTHIS" 
      returnvariable="THIS" 
    />

哪些工作 - 除了(似乎)映射...

this.name等,似乎都可以工作并设置 - 事实上,如果我这样做,那么this.mappings也会设置好(所以看起来好像)

<cfdump var="#THIS#" label="THIS" />

当我在app.cfc页面上设置'字面'时,转储与此转储相同..

但是 - 任何通过映射调用模板的尝试都会产生一个标准“如果你想使用绝对路径来创建映射等等......”

MY BIGGER的目标是(在应用程序启动时)扫描目录中的子目录,并根据某些子目录创建映射..但是如果我不能将该功能抽象到它自己的功能中 - 我会被迫直接在app.cfc中编写它(这不会杀了我,但是再一次,我试图在逻辑上划分我的代码......似乎有时间和地点可以设置这些映射的限制..真的吗?

所以我想最大的问题是 - 我可以通过外部方法设置this.mappings吗? 我想我可以使用cfc调用恢复'我想要的设置',然后只需执行'set this.whatever = return form cfc' - (这可能是我的答案......)

由于

2 个答案:

答案 0 :(得分:0)

映射只能在'伪构造函数'中设置,而不能在Application.cfc中的任何方法内设置 - http://adobe.ly/QN2oX1

您可以尝试将this.mappings设置为CFC调用的结果(我无法想到为什么这不起作用),但如果它依赖于映射来执行此操作,则可能无效。

答案 1 :(得分:0)

我没有测试过这个,但我很确定如果你的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();
    ...
}