2

以前は (ローカルでも)、fusebox5 ディレクトリを Web ルートに配置しており、ツリー内のどこからでもアプリケーションがアクセスできました。以前は、.cfc ではなく Application.cfm も使用していました。

この環境では、私は webroot にアクセスできず、FB ファイルは実際にはそこまで下にある必要がないので、アプリケーションと一緒に保存することを計画していました。Application.cfc が使用されている場合、index.cfm が見落とされていると考えるのは正しいですか (したがって、cfinclude の値を ../fusebox5/ などに変更しても意味がありません)。その場合、Fusebox をルートまたはマッピングに含めずにフレームワークを含めるにはどうすればよいですか? エラーは次のとおりです。

Could not find the ColdFusion Component or Interface fusebox5.Application. 
4

3 に答える 3

1

アプリのルートのサブフォルダーで Fusebox 5+ を実行できます。それを機能させることは、最も明白なことではないかもしれません。

残念ながら、Application.cfc がまだインスタンス化されていないため、Application.cfc を拡張するための動的マッピングを作成することはできません。鶏と卵のシナリオが発生します。Application.cfc が起動しなかったため、Fusebox へのマッピングを作成できません。拡張するはずのコンポーネントが見つからないため、Application.cfc を起動できません。

これは COLDFUSION 8 のバグです。ColdFusion は次の順序でマッピングを検索する必要があります。

  • CF アドミニストレーターからマップされたフォルダー
  • 現在のディレクトリのサブディレクトリ
  • 呼び出された Web ルートのサブディレクトリ

これは、CreateObject() を使用すると行われますが、cfcomponent で Extends 属性を使用した場合には行われません。

最も簡単な解決策は、他のアプリケーションと同じように Application.cfc を使用し、次に index.cfm から fusebox を含めることです。フォルダー構造は次のようになります。

/myapp/fusebox5/
/myapp/index.cfm
  -- consists of <cfinclude template="fusebox5/fusebox5.cfm" />

Application.cfc の OnRequest でリクエストをインターセプトしない限り、index.cfm ファイルは無視されません。または、OnRequest を使用する場合は、目的のターゲット (ほとんど常に index.cfm になります) が含まれていることを確認してください。

index.cfm でインクルードを実行する必要がない場合は、Application.cfc の OnRequest メソッドで cfinclude を実行できます。

<cffunction name="onRequest">
    <cfinclude template="fusebox5/fusebox5.cfm">
</cffunction>

Web サーバーがディレクトリの一覧や 404 を表示しないように index.cfm が必要な場合もありますが、ファイルが空であれば問題ありません。

于 2009-05-21T18:52:39.963 に答える
0

Application.cfc で:

<cfscript>
    this.mappings = {}; //create a new structure to store app-specific mappings
    this.mappings["Fusebox"] = expandPath('./Fusebox'); //add mapping
</cfscript>
于 2009-05-21T17:19:07.937 に答える