どのように私は別のディレクトリにCFCを保存し、それらの作品を作るのですか?
-
24-09-2019 - |
質問
タグ内のコンポーネントのパスを指定する方法はありますか?
私は自分のアプリケーションのためのColdFusionコンポーネントを使用しています。私のアプリケーションは、しかし、いくつかのフォルダを持っている、と私は仕事にCFCをするたびに、私は必要性へのアクセスもののファイルと同じディレクトリに保存する必要があります。私が同一である複数のCFCファイルの作成中にこの結果ます。
1つのディレクトリに私のCFCを保存する方法はありますし、それが私のサイト間で動作させる?
解決
他の人のように指摘している、あなたはあなたのアプリケーションのルートを見つけマッピングと機能を備えた面白いことを行うことができますが、あなたの質問の中心で、一般的なパスの指定です。
私は<あなたがColdFusionコンポーネントを使用しての部分を読むことをお勧め/ CFCの場所のの指定> の<強いというタイトルます。
>ドキュメント基本的に、何それは言うことは、アプリケーションが http://example.com/myApp/あなたは http://example.com/myApp/foo/bar/でページを持っていますfubar.cfmするでコンポーネントを使用したいこと:
/myApp/foo/components/library/fubar.cfc
そしてfubar.cfmはこのような何かを行う必要があります:
<cfset fubar=createObject("component", "myApp.foo.components.library.fubar") />
あなたは、ファイルのパスを取り、ドット(別名「ドット表記」)とスラッシュを交換し、また、負荷にしたいコンポーネントのファイル名から「.cfcという」をドロップします。
また、あなたは、名前のマッピング(アーロンが説明するように)、あなたはポイントが/components
すること/myApp/foo/components/
と呼ばれるマッピングを作成した場合ので、あなたのCreateObjectの呼び出しは次のようになりを使用することができます
<cfset fubar = createObject("component", "components.library.fubar") />
同じドット表記パスが<cfinvoke />
属性の一部として、component
で使用することができる:
<cfinvoke component="components.library.fubar" ... />
他のヒント
あなたがここにできることがいくつかあります。私は、あなたは彼らが意味をなす(ルート/ COM、またはルート/モデル、または何でも)コンポーネントを配置し、アプリケーションのベースからそれらを参照することをお勧めします。
ColdFusion Administratorで、あなたのアプリケーションのルートにマッピングされたパスを設定することができ、そのパスからあなたのコンポーネントを参照します。
myObject = createObject('component','nameOfMyMapping.models.service.answerStackOverflowQuestions');
また、動的にアプリケーションのルートを見つけるためにあなたのApplication.cfm / Application.cfcの中でいくつかのロジックを実行することができます。この方法は、特別な権限を必要とせず、あなたが別の的環境にアプリケーションを再配置した場合に動作します。迅速なGoogleがこれを行います機能とピーター・フライターグでブログ記事を上げ。ちょうどあなたがの.cfcというのアプリケーションを使用している場合の.CFMのを交換してください。 http://www.petefreitag.com/item/630.cfmする
CFLib.orgも、それはあなたのためのルートパスを見つけるように見える方法があります。 http://www.cflib.org/udf/GetRootPathする
あなたのルートパスを変数に格納したら、は、物事は簡単に入手ます。
myObject = createObject('component','#myRoot#.models.service.answerStackOverflowQuestions');
最後に、多くのフレームワークはこれを作った、および他の多くの一般的なtaks、非常にシンプル。あなただけの任意のColdFusionフレームワークについて選択することができます。誰かがすでにホイールを発明し;)
。楽しん!
用ColdFusion 9
ファイルシステム
/
lib/
DataAccess.cfc
IndexingService.cfc
app/
Application.cfc
index.cfm
ファイル:/app/Application.cfc
component {
root = goUpDirectory(2, GetCurrentTemplatePath());
This.mappings["/lib"] = "#root#/lib";
This.mappings["/app"] = "#root#/app";
function goUpDirectory(levels, path) {
for(levels = levels; levels >= 1; levels -= 1) {
path = GetDirectoryFromPath(path);
path = Left(path, Len(path) - 1);
}
return path;
}
}
ファイル:/app/controllers/UsersController.cfc
component {
...
da = new lib.DataAccess();
...
}
のためにColdFusion 8の
ちょうど代わりCreateObject
のnew
、代わり<cfcomponent />
のcomponent { }
等を用いて、上記と同じ。