3

CF application.cfcを使用する場合、this.nameやthis.applicationtimeout()など、(このスコープ内で)最初にいくつかの変数を作成する必要があります。

私は奇妙な振る舞いをしていると思う何かに出くわしました-そして誰かがこれが起こる理由と可能な回避策を説明できることを願っています。

アプリケーション固有の変数を設定するために機能する、受け入れられた「この」変数はかなりあります(もちろん、CFADMINで「アプリケーション固有の変数を許可する」をチェックする必要があります-私が行いました)

これらの1つは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にcfincludeすると

ただし、コードをセグメント化するために、すべてのアプリケーション設定を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ページで「文字通り」に設定したときのこのダンプと同じです。

ただし、マッピングを介してテンプレートを呼び出そうとすると、標準の「絶対パスを使用する場合は、マッピングを作成する必要があります...」という結果になります。

私の大きな目標は、(アプリケーションの起動時に)ディレクトリでサブディレクトリをスキャンし、特定のサブディレクトリに基づいてマッピングを作成することでした。しかし、その機能を独自の機能に抽象化できない場合は、 app.cfcに直接書き込みます(これは私を殺しませんが、繰り返しますが、コードを論理的にセグメント化しようとしました...これらのマッピングを設定できる時間と場所には制限があるようです...本当ですか?

だから私は大きな問題だと思います-外部メソッドを介してthis.mappingsを設定できますか?cfc呼び出しを使用して、「必要な設定」を元に戻し、「set this.whatever = return form cfc」を実行できると思います-(これが私の答えかもしれません...)

ありがとう

4

2 に答える 2

0

マッピングは「疑似コンストラクター」でのみ設定でき、Application.cfc 内のメソッド内では設定できません - http://adobe.ly/QN2oX1

this.mappings を CFC 呼び出しの結果に設定することもできます (これが機能しない理由はわかりません) が、マッピングに依存している場合は機能しない可能性があります。

于 2012-08-10T16:32:03.350 に答える
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();
    ...
}
于 2012-08-10T16:43:04.163 に答える