3

私は最新バージョンの railo を使用しており、アプリケーションごとのマッピングを機能させようとしています。これは私がやっていることです:

<cfcomponent name="MyApp">
    <cfset THIS.Name = "MyApp">
    <cfset THIS.Mappings["/myapp"] = ExpandPath(".")>
</cfcomponent>

そのため、rootapp.myapp.* にアクセスするのではなく、myapp.* マッピングを介してこのアプリケーション フォルダー内のコンポーネントにアクセスできるようにしようとしています (私が理解していることから、このコンポーネントのセットアップは機能するはずです。

ただし、このマッピングではコンポーネントにアクセスできません。コード内のアプリケーション変数で cfdump を実行すると、「applicationname」が「MyApp」に設定されていることが示されますが、マッピングには何も表示されません。

railo はこれらのマッピングをサポートしていませんか、それとも何か間違っていますか?

編集:

これは私が得ている正確なエラーです:

invalid component definition, can't find myapp.data.MyObject

myappマッピングが作成されている必要があり、存在MyObjectします。ここに私の構造があります:

/rootfolder/myapp/Application.cfc
/rootfolder/myapp/data/MyObject.cfc
/rootfolder/myapp/pages/MyPage.cfm

つまり、「MyPage.cfm」はマッピングに依存して「MyObject」コンポーネントに簡単にアクセスします。Application.cfcロードする必要があります。これは、cfml プロセッサがディレクトリを見つけるまで上に移動し始めるためです。

4

2 に答える 2

2

更新: Sergiiが指摘したように、構文は有効ですが、最終的な効果は同じです。

この構文を使用してみてください

<cfcomponent>
    <cfset THIS.Name = "MyApp">
    <cfset THIS.mappings = { "/myapp" = ExpandPath(".") } >
</cfcomponent>
于 2011-07-29T16:20:36.113 に答える
2

あなたの構文はOKです。ディレクトリツリーの奥深くにあるアプリケーションに対して同じことをしただけで、正常に動作します。

ただし、このマッピングではコンポーネントにアクセスできません。

正確なエラーとは何ですか? 「無効なコンポーネント定義です。myapp.xyz が見つかりません」?

cfm と cfc は同じディレクトリにありますか? (これは基本的にあなたがやろうとしていることです)

コード内のアプリケーション変数で cfdump を実行すると、「applicationname」が「MyApp」に設定されていることが示されますが、マッピングには何も表示されません。

アプリケーションスコープをダンプしても、この情報は表示されません。唯一のオプションは、Application.cfc を通常の cfc として使用することです。

<cfset app = CreateObject("component",  "application") />
<cfdump var="#app#">

編集。ここには 2 つの解決策があります。

次のようにマッピングを定義すると、Application.cfc のパスが計算されます。

<cfset this.mappings["/myapp2"] = getDirectoryFromPath(getCurrentTemplatePath())>

または、次のようにコンポーネント パスを変更します。

<cfset MyObject = CreateObject("component",  "myapp.data.MyObject") />

問題は、 と によって返されるパスの違いにExpandPathありgetCurrentTemplatePath()ます。

于 2011-07-29T17:29:01.660 に答える