2017-05-16 13 views
0

まず、読んでいただきありがとうございます。また、私はCFの仲間です。CFアプリケーションスコープはMuraで変更できますか?

私は、ユーザがウェブフォームに記入すると呼び出される.cfmファイルを持っています(つまり、フォームアクションがPOSTの方法でそれを指しています)。その後、.cfmは別のフォームをデータ追跡エンドポイントにPOSTし、次のユーザー向きのビューに進みます。

私が苦しんでいるこの問題は、これまでのMuraプロジェクトでは、アプリケーションスコープが期待通りに動作しないということです。例えば、私はそうのようなアプリケーションVARSを設定します。この文脈でcfdump'd場合

<cfif isDefined(form.campaign) AND len(form.campaign) > 
     <cfset application.campaign = form.campaign /> 
    <cfelse> 
     <cfset application.campaign = 'default' /> 
</cfif> 
<cfif isDefined(form.channel) AND len(form.channel)> 
     <cfset application.channel = form.channel /> 
    <cfelse> 
     <cfset application.channel = form.channel/> 
</cfif> 

は、私はそれを渡しているものに基づいて期待値に出てきます。しかし、次のビュー(cflocationを使用)に転送し、アプリケーションスコープcfdumpを転送すると、その2つのキーは使用できません。

私は、アプリケーションスコープがセッションの間、多かれ少なかれ続くと思われていましたか?

+1

質問には関係ありませんが、実際のコードでは 'isDefined(form.campaign)'ではなく 'isDefined(" form.campaign ")'(引用符付き)を使用しているとします。それ以外の場合、その変数が定義されていないと、コードはエラーになります。 – Leigh

+0

'application'スコープは変更可能ですが、私は本当に' session'スコープを使用するべきであるというあなたの質問に基づいて考えています。 'application'スコープはアプリケーションごとです。つまり、アプリケーションのすべてのユーザーが同じアプリケーションスコープを参照します。 'session'スコープはユーザーごとです。両方のスコープは、 'application.cfc'で定義されたタイムアウト値まで持続します。 – beloitdavisja

+1

実際のコードが含まれていないため、この問題を確認するのは難しいです。あなたが与えたコードサンプルにはいくつかの問題があります。 Leighが既に指摘したように、 'isDefined()'関数の値を引用する必要があります。このコードは 'form.channel'変数が存在しないときに間違って割り当てています - これはエラーを投げます。理論的には、アプリケーションやセッションスコープに値を割り当てることは問題ではなく、それらの値は維持されるべきです。だから、あなたのコードには何かが間違っている可能性がありますが、与えられた例を使って、それが何であるかはわかりません。 –

答えて

1

TLDR:アプリケーション内にApplication.cfXのインスタンスが1つだけ存在することを確認してください。

チームメンバーが、Application.cfcよりもディレクトリの上位レベルにapplication.cfmというファイルを作成しました。これは、適切なファイルよりも優先され、大量のものを壊しました。

ビジネスロジック/フォーム処理に使用される.cfmファイルへのHTTP要求を試行するために追加されました。これは可能でしたが、他にも多くの問題が生じました。

ディレクトリからそのファイルを削除し、フォーム処理ロジックを/ remote(HTTPリクエストに対してMuraがサポートする)に移動し、いくつかのコードをリファクタリングしました。 Mura($)スコープと同様に、アプリケーション全体でアプリケーションとセッションスコープが再び利用可能になります。

関連する問題