質問
別のディレクトリでCFCを拡張したいのですが、いくつかのオプションがありますが、これを行う方法がわかりません:
A)動的マッピングを使用します(これはサイトに基づいて動的である必要があります。たとえば、ライブサイトの場合はcfc.myPackage.MyCFCですが、開発サイトの場合はmyCfcRoot.myPackage.MyCFCになります)-I '拡張ビットに式を入れようとしましたが、明らかにCFはそれを好まない、例えば:
<cfcomponent name="MyComponent" extends="#config.cfcRoot#.BaseComponent">
または
<cfcomponent name="MyComponent" extends="#GetRealPath(../BaseComponent.cfc)#">
B)拡張するCFCへの相対パスを(何らかの形で)提供します。
私はこれができないのではないかと心配していますが、私が見逃した何かがあることを望んでいます。
解決
ダニエルは基本的に正しいので、マッピングが必要です。ただし、3つの回避策があります。
CFCは相対ルートマッピングとして現在のパスを選択するため、CFCがすべて同じディレクトリにある場合は、単に
と言うことができます。<cfcomponent name="MyComponent" extends="Example">
または、コンポーネントが現在のcfcのサブディレクトリにある場合、アクセスできます:
<cfcomponent name="MyComponent" extends="subdirectory.Example">
2番目に、ColdFusion 8で実行している場合、次のようなマッピング構造体を使用してapplication.cfcでマッピングを定義できます。
<cfset this.mappings["/MyApp"] = expandPath(".") />
Application.cfcには2つの優れたリファレンスがあります。1つ目は、 Ray Camdenのサンプルアプリケーションです。 cfc は、どこに行くのかを簡単に表示し、 CF8 Live Docsアプリケーションの設定ページ。マッピングに関するセクションといくつかの良いコメントがあります。
最後に、Webルートの組み込みマッピングを使用できます。したがって、アプリケーションが&quot; MyApp&quot;という名前のサブディレクトリにある場合、 Webルートから離れると、ルートマッピングは&quot; MyApp&quot;になります。コンポーネントを正しく配置したとしましょう:
wwwroot\MyApp\com\MyApp\example.cfc
この場合のこのcfcへのマッピングは次のようになります。
MyApp.com.MyApp.Example
そして例を使用して、次のように拡張できます:
<cfcomponent name="MyComponent" extends="MyApp.com.MyApp.Example">
コンポーネントがWebルート外にある場合や、完成したアプリケーションのフォルダー構造が不明な場合など、CFアドミニストレーターでマッピングを設定する必要がある場合など、他のすべて。
他のヒント
CFCが呼び出しスクリプトと同じディレクトリにない限り、CFCは「マッピング」に関連するパスから見つけて参照する必要があります。
&quot; /&quot;を確認する必要がある場合があります。 Webサーバーのドキュメントルートにマップされ、すべての相対パスのベースになります。または、すべての一般的なCFCを保持するCFCディレクトリのマッピングを設定できます。
この画面は、ColdFusion Adminの「サーバー設定」の下にあります。 -&gt; &quot;マッピング&quot;。
現在、これはcf8でのみテストされているため、他のエンジンは異なる可能性があります。
相対パスを使用してアプリケーションを拡張する場合は、可能ですが、「 /。」で開始する必要があります。たとえば、これを行うと、application.cfcをWebルートからwebrootの下のディレクトリに拡張できます。
<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>
これが理にかなっていることを願っています。
方法Bに関しては、例の追加ファイルを使用して実行できます。拡張したいディレクトリごとに拡張したいcfcごとに1つの追加ファイルです。
必要な3つのファイル。
- /somepathtobasecomponent/basecomponent.cfc(ベースコンポーネントファイル)
- /pathtoworkingcfc/function.cfc(extends属性を持つファイル)
- /pathtoworkingcfc/basecomponent_extend.cfc(拡張を行う新しいファイル)
/somepathtobasecomponent/basecomponent.cfc
ここで変更するものはありません。これは同じままです。
/pathtoworkingcfc/function.cfc
cffunction
タグセットで、extendsを extends =&quot; basecomponent_extend&quot;
/pathtoworkingcfc/basecomponent_extend.cfc
ファイルの唯一のコンテンツは cfinclude
<cfinclude template="/somepathtobasecomponent/basecomponent.cfc">