1

私のapplication.cfcは次で始まります:

<cfcomponent extends="org.corfield.framework">

後でvoid function setupApplication() output="false" {

私は持っている

// tools
include "initapp.cfm";

initapp.cfm には関数しかありません。次のようなもの:

<!--- Helper functions --->
<cfscript>
string function stripHTML(str) output="false" {
return REReplaceNoCase(arguments.str,"<[^>]*>","","ALL");
}

application.stripHTML = stripHTML;

</cfscript>

関数の性質は、セッションに関連付けられていません。関数をグローバルに利用可能にするより良い方法はありますか?

4

2 に答える 2

5

CFC で使用するためにヘルパー関数をまとめようとしている場合、1 つのオプションは component.cfc ファイルを使用することです。

component.cfc ファイルの使用

すべての CFC は、ColdFusion WEB-INF/cftags/component.cfc コンポーネントを自動的に拡張します。(WEB-INF ディレクトリは、組み込み J2EE サーバーで構成された ColdFusion の cf_root/wwwroot ディレクトリにあります。ColdFusion を J2EE サーバーにデプロイすると、cf_root ディレクトリにあります。)この CFC は、長さゼロのファイルとして配布されます。これは、ColdFusion アプリケーション サーバー インスタンス内のすべての CFC に継承させたいコア メソッドまたはプロパティに使用できます。

注: ColdFusion の新しいバージョンをインストールすると、インストール手順によって既存の component.cfc ファイルが新しいバージョンに置き換えられます。したがって、アップグレードする前に、追加したコードをすべて component.cfc ファイルに保存してから、そのコードを新しい component.cfc ファイルにコピーする必要があります。

そのソリューションがグローバルすぎる場合は、ヘルパー cfc を拡張できますが、すべての cfc で実行する必要があり、一度設定して忘れるというアイデアには答えません。CFC の効果的な使用を参照してください。

ヘルパー関数を .cfm ファイルで使用する場合は、Adam が提案したようにします。私は通常、ヘルパー関数を CFC フォルダーにある「ツール」cfc に入れ、それをアプリケーション スコープの cfc にします。

function onApplicationStart(){
    application.tools = createObject("component", "cfc.tools");
}

私のヘルパー関数の 1 つは、solr コレクションのインデックス作成にかかる時間をログに記録します。使用すると次のようになります

<cfset application.tools.logSolrIndex('collectionName',getTickCount()-start,qFileList.recordCount)>

最後の手段: application.cfc の外部で使用するためにインクルードに固執する必要がある場合は、ページをインクルードする前に単に initapp.cfm onRequest() をインクルードするかもしれません。

于 2012-12-07T12:26:32.807 に答える
3

関数をライブラリCFCに配置し、そのCFCのインスタンスをのアプリケーションスコープに配置しonApplicationStart()ます。

とは言うものの、他のCFC内でこのアプリケーションスコープのCFCを参照すると、カプセル化が破られることになります。これは考慮事項です(必ずしも取引ブレーカーではありませんが、考慮事項です)。

これを軽減するために、ある種の依存性注入アプローチを検討することができます(例:ColdSpring

どちらの方法でやったとしても、あなたのやり方ではやらないでしょう。恐れています。

于 2012-12-07T09:15:16.117 に答える