ColdFusion this.MappingsはCFC->機能では機能しません
-
11-10-2019 - |
質問
Application.cfcで定義したマッピングを他のCFCの他の機能で動作させるにはどうすればよいですか?
IE this.mappings ["Plugins"]はどのページでも正常に動作しますが、this.mappings ["プラグイン"]を呼び出す関数を含むCFCをインスタンス化しようとすると、失敗します。
ありがとう
編集:よくわかりません - これが私がやろうとしていることです:Application.cfc:
this.mappings["Plugins"] = \
getDirectoryFromPath(getCurrentTemplatePath())&'Assets/Plugins';
in stock.cfc:
<cfcomponent output="yes" >
<cffunction name="showIndecies" access="public" output="yes" returntype="string">
<cfscript>
j = 1;
variables.indeciesArray = ArrayNew(1);
variables.indeciesFile = \
application.mappings["Plugins"]&'/StockMarketData/Data/indecies.csv';
</cfscript>
解決
マッピングを間違って呼んでいると思います。 Application.cfcで定義を使用する:
this.mappings["plugins"]
その後、他のコードで「プラグイン」によって参照されます。
var aName = new plugins.theCFC()
var aName = createObject("component","plugins.theCFC").init()
<cfinclude template="/plugins/aFile.cfm">
HTH、呼び出しページにコードを投稿しない場合。
他のヒント
CFC内のアプリケーションの内部は1つです。「この」スコープは、その特定のCFCにのみ関係しています。したがって、CFMページにいる場合、それはapplication.cfcの管轄に該当する場合、「この」スコープはapplication.cfc用ですが、CFCでは、その特定のCFCの場合です。
とはいえ、なぜマッピング構造体に直接アクセスする必要があるのですか?そのマッピングを使用してオブジェクトをロードするか、ファイルを含める場合は、実行することができます <cfinclude template="/plugins/path/to/myfile" />
また <cfset obj = createobject("component","plugins.path.to.my.cfc") />
.
構造体に直接アクセスする必要があるためのユースケースは何ですか?変更しようとしていますか?
*コードを修正するために編集
CF9で状況が変更されていない限り、各マッピング名の先頭にスラッシュなしでマッピングキーを定義しているコードの最初の間違い。
マッピングをとして定義しています
this.mappings["plugins"] =
代わりにそうあるべきです
this.mappings["/plugins"] =
構造キー名のスラッシュ "/"に注意してください。各マッピングにそのように名前を付ける必要があります。
その後、あなたはサム・ファーマーが彼のコメントで言及したようにマッピングを参照するでしょう」
その後、他のコードで「プラグイン」によって参照されます。
var aName = new plugins.theCFC() var aName = createObject("component","plugins.theCFC").init() <cfinclude template="/plugins/aFile.cfm">