1

Application.cfm に、cfqueries のデータソースを格納する変数があります。

<cfset mydatasource= 'somedatasorce'>

以下のように、通常の cfm ページで使用できます。

<cfset any_var = #mydatasource#>

クエリを動的に構築する cfc を呼び出す cfm ページがあります。これが CFC の URL Invocation Method です。

上記のステートメントを使用して CFC の「mydatasource」にアクセスできません。「mydatasource」は未定義です。これをアプリケーションスコープに保存してCFCでアクセスしようとしましたが、「mydatasource」は「アプリケーション」で定義されていません。

少し調べてみると、Application スコープにアクセスするには、CFC をインスタンス化する必要があることがわかりました。ただし、URL 呼び出しメソッドはインスタンスを作成しません。

クエリ文字列を使用してデータソースを渡すことができますが、より安全でより安全な代替手段を探しています。

どんな提案でも大歓迎です。

ありがとう!!:)

4

1 に答える 1

1

ここでは、古いアプリケーションに多数の ajax 呼び出しを追加しており、アプリケーション固有の設定を取得するために、App.cfc という名前のファイルを作成しました。その内容は次のとおりです。

<cfcomponent>
<cfscript>
this["datasource"] = "something";
..... and so on .....
</cfscript>
</cfcomponent>

次に、URL 呼び出しを行っている CFC ファイルは、単純に App を拡張します。だから私ができるそれらのCFCの中でdatasource="#this['Datasource']#"

仕事を成し遂げるための最も「きれいな」方法ではないかもしれませんが、ここでは問題なく機能しています。

アップデート

その CFC と Application.cfm の両方に設定を持たないようにするために、Application.cfm に次のようなものがあることも言及しておく必要がありました。

<cfscript>
objApp = CreateObject("component", "Components.App");
StructAppend(App, objApp);
</cfscript>

私が使用しているこれらの古いアプリケーションには、すべてのアプリケーション変数のコピーである App と呼ばれる VARIABLES を持つ構造があります。この場合、VARIABLES に追加する構造を実行できない理由はわかりません。これは、CFM ページでデータソースなどを期待しているように見えるからです。

于 2013-09-05T16:11:57.207 に答える