8

タグでコンポーネントのパスを指定する方法はありますか?

アプリケーションに ColdFusion コンポーネントを使用しています。しかし、私のアプリケーションにはいくつかのフォルダがあり、CFC を機能させるたびに、アクセスが必要なファイルと同じディレクトリに保存する必要があります。これにより、同一の CFC ファイルがいくつか作成されます。

CFC を 1 つのディレクトリに保存して、サイト全体で機能させる方法はありますか?

4

3 に答える 3

10

他の人が指摘したように、アプリケーションのルートを見つけるマッピングと関数を使用して興味深いことを行うことができますが、質問の中心は一般的なパスの指定です。

Using ColdFusion ComponentsドキュメントのSpecifying the CFC locationというタイトルの部分を読むことをお勧めします。

基本的に、アプリケーションが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」を削除します。

さらに、(Aaron が説明したように) 名前付きマッピングを使用できるため、/componentsそのポイントを指すという名前のマッピングを作成すると/myApp/foo/components/、createObject 呼び出しは次のようになります。

<cfset fubar = createObject("component", "components.library.fubar") />

属性<cfinvoke />の一部として、同じドット表記パスを使用できます。component

<cfinvoke component="components.library.fubar" ... />
于 2010-03-04T14:33:49.817 に答える
6

ここでできることがいくつかあります。コンポーネントを適切な場所 (root/com、root/models など) に配置し、アプリケーション ベースから参照することをお勧めします。

ColdFusion アドミニストレータでは、アプリケーション ルートへのマップ パスを設定し、そのパスからコンポーネントを参照できます。

myObject = createObject('component','nameOfMyMapping.models.service.answerStackOverflowQuestions');

Application.cfm / Application.cfc でいくつかのロジックを実行して、アプリケーションのルートを動的に見つけることもできます。この方法は特別な権限を必要とせず、アプリケーションを別の環境に再配置する場合に機能します。簡単な Google は、まさにこれを行う機能を備えた Peter Freitag によるブログ投稿を見つけました。Application .cfcを使用している場合は、必ず.cfmを置き換えてください。http://www.petefreitag.com/item/630.cfm

CFLib.org には、ルート パスを見つける方法もあります。http://www.cflib.org/udf/GetRootPath

ルート パスを変数に格納すると、作業が簡単になります。

myObject = createObject('component','#myRoot#.models.service.answerStackOverflowQuestions');

最後に、多くのフレームワークでは、これや他の多くの一般的なタスクが非常に単純になっています。ほぼすべての ColdFusion フレームワークを選択できます。誰かがすでに車輪を発明しました;)。

楽しむ!

于 2010-03-04T14:09:45.910 に答える
4

ColdFusion9の場合

ファイルシステム

/
  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();
  ...
}

ColdFusion8の場合

上記と同じですが、の代わりに、などの代わりに使用しCreateObjectます。new<cfcomponent />component { }

于 2010-03-04T14:04:09.580 に答える