10

別のディレクトリでCFCを拡張したいのですが、いくつかのオプションがありますが、これを行う方法がわかりません。

A)動的マッピングを使用します(これはサイトに基づいて動的である必要があります。たとえば、ライブサイトの場合はcfc.myPackage.MyCFCですが、開発サイトの場合はmyCfcRoot.myPackage.MyCFCになります)-試しました式をextendsビットに入れますが、明らかにCFはそれを好みません。

<cfcomponent name="MyComponent" extends="#config.cfcRoot#.BaseComponent">

また

<cfcomponent name="MyComponent" extends="#GetRealPath(../BaseComponent.cfc)#">

B)延長するCFCへの相対パスを(何らかの方法で)提供します。

できないのではないかと心配ですが、見逃してしまったことがあるといいなと思っています。

4

4 に答える 4

11

ダニエルは基本的に正しいです。マッピングが必要です。ただし、3 つの回避策があります。

CFC は現在のパスを相対ルート マッピングとして選択するため、CFC がすべて同じディレクトリにある場合は、

<cfcomponent name="MyComponent" extends="Example">

または、コンポーネントが現在の cfc のサブディレクトリにある場合は、次のようにアクセスできます。

<cfcomponent name="MyComponent" extends="subdirectory.Example">  

次に、ColdFusion 8 で実行している場合は、次のように mappings 構造体を使用して、application.cfc でマッピングを定義できます。

<cfset this.mappings["/MyApp"] = expandPath(".") />

Application.cfc には 2 つの適切なリファレンスがあります。1 つ目は、Ray Camden のサンプル Application.cfcです。これは、何がどこにあるのかをよく示しているだけです。次に、CF8 Live Docs アプリケーション設定ページです。これには、マッピングに関するセクションといくつかの優れたコメントがあります。

最後に、Web ルートの組み込みマッピングを使用できるため、アプリケーションが Web ルートから離れた「MyApp」という名前のサブディレクトリにある場合、ルート マッピングは「MyApp」になります。コンポーネントを正しく配置したとしましょう:

wwwroot\MyApp\com\MyApp\example.cfc

この場合、この cfc へのマッピングは次のようになります。

MyApp.com.MyApp.Example

あなたの例を使用すると、次のように拡張できます。

<cfcomponent name="MyComponent" extends="MyApp.com.MyApp.Example">

コンポーネントが Web ルートの外にある場合や、完成したアプリケーションのフォルダー構造がどうなるかわからない場合は、CF アドミニストレーターでマッピングを設定する必要があります。

于 2008-11-13T16:10:36.167 に答える
3

現在、これはcf8でのみテストされているため、他のエンジンは異なる可能性があります。

相対パスを使用してアプリケーションを拡張する場合は可能ですが、「/。」で開始する必要があります。たとえば、これを実行して、application.cfcをWebルートからWebルートの下のディレクトリに拡張できます。

<cfcomponent output="false" extends="/.application">
 <!--- whatever code you have --->
</cfcomponent>

ここで、アプリケーションに次のパスがあるとします。

[webroot]/1/1a
[webroot]/2

[webroot] /1/1aのapplication.cfcが[webroot]のapplication.cfcを拡張するとします。ここで、application.cfcを[webroot] / 2に配置し、application.cfcを[webroot] /1/1aに拡張します。[webroot]/2/application.cfcで行う必要があるのは次のとおりです。

<cfcomponent output="false" extends="/./1/1a/application">
 <!--- whatever code you have --->
</cfcomponent>

これが理にかなっていることを願っています。

于 2008-11-18T21:59:53.760 に答える
2

CFCが呼び出し元のスクリプトと同じディレクトリにない限り、CFCは、「マッピング」に相対的なパスから見つけて参照する必要があります。

「/」がウェブサーバーのドキュメントルートにマップされ、それがすべての相対パスのベースになることを確認する必要がある場合があります。または、すべての一般的なCFCを保持するCFCディレクトリのマッピングを設定できます。

この画面は、ColdFusionAdminの[サーバー設定]->[マッピング]にあります。

于 2008-11-13T15:18:37.473 に答える
0

メソッド B に関しては、あなたの例で追加のファイルを使用して行うことができます。拡張元のディレクトリごとに拡張するのは、cfc ごとに 1 つの追加ファイルです。

必要な3つのファイル。

  • /somepathtobasecomponent/basecomponent.cfc (基本コンポーネント ファイル)
  • /pathtoworkingcfc/function.cfc ( extends 属性を持つファイル)
  • /pathtoworkingcfc/basecomponent_extend.cfc (拡張を行う新しいファイル)

/somepathtobasecomponent/basecomponent.cfc

ここで変更することは何もありません。これはそのままです。

/pathtoworkingcfc/function.cfc

cffunctionタグセットでは、拡張先extends="basecomponent_extend"

/pathtoworkingcfc/basecomponent_extend.cfc

ファイルの唯一の内容は、cfinclude

<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">
于 2012-07-05T12:23:40.933 に答える