2012-02-06 58 views
1

我有一個ColdFusion網站與application.cfm。它在它定義的cfapplication:你可以在application.cfm中有多個cfapplications?

<cfapplication name="FhaApp" clientmanagement="no" 
      sessionmanagement="yes" sessiontimeout="#createTimeSpan(0,0,360,0)#"> 

<cflock timeout="120" name="#session.sessionID#" type="exclusive"> 
<cfcookie name="CFID" value="#session.CFID#" > 
<cfcookie name="CFTOKEN" value="#session.cftoken#" > 
</cflock> 
<cfparam name="session.fromwhere" default=""> 
<cfif #cgi.SCRIPT_NAME# contains 'default-partner-'> 
    <cfif not ISDEFINED("cookie.fromwhere")> 
<cfcookie name="fromwhere" value="#right(cgi.SCRIPT_NAME,   (len(cgi.SCRIPT_NAME)-1))#" expires="30"> 
    <cfset session.fromwhere = #right(cgi.SCRIPT_NAME,(len(cgi.SCRIPT_NAME)-1))#> 
    </cfif> 
</cfif> 

<cfset datasourcename="fha47"> 

<cfparam name="application.dsn" default="fha47"> 

<cfparam name="session.loggedin" default="false"> 
<cfparam name="session.ppcid" default="101"> 
<cfparam name="session.cid" default="FHA"> 

我想補充另一個cfapplication,看起來像這樣:

<cfapplication name = "QSvalues" 
sessionTimeout = "#CreateTimeSpan(0,0, 0, 60)#" 
sessionManagement = "yes"> 


<cflock scope = "Session" 
timeout = "30" type = "Exclusive"> 
<cfif NOT IsDefined("session.prop_st")> 
    <cfset session.prop_st = ""> 
</cfif> 
<cfif NOT IsDefined("session.prop_zip")> 
    <cfset session.prop_zip = ""> 
</cfif> 
<cfif NOT IsDefined("session.address")> 
    <cfset session.address = ""> 
</cfif> 
<cfif NOT IsDefined("session.email")> 
    <cfset session.email = ""> 
</cfif> 
<cfif NOT IsDefined("session.fname")> 
    <cfset session.fname = ""> 
</cfif> 
<cfif NOT IsDefined("session.lname")> 
    <cfset session.lname = ""> 
</cfif> 
<cfif NOT IsDefined("session.pri_phone_1")> 
    <cfset session.pri_phone_1 = ""> 
</cfif> 
<cfif NOT IsDefined("session.pri_phone_2")> 
    <cfset session.pri_phone_2 = ""> 
</cfif> 
<cfif NOT IsDefined("session.pri_phone_3")> 
    <cfset session.pri_phone_3 = ""> 
</cfif> 
</cflock> 

<cflock scope = "Application" timeout = "30" type = "Exclusive"> 
<cfif NOT IsDefined("application.number")> 
    <cfset application.number = 0> 
</cfif> 
</cflock> 

我的問題是,你可以在主application.cfm定義兩個單獨的cfapplication?

+0

不是。它可能不會導致語法錯誤,但最後一個會勝出。你想達到什麼目的? – Leigh 2012-02-06 19:46:52

回答

3

我不完全確定你爲什麼想要或需要第二個cfapplication;從代碼或解釋中不太清楚。我想你可能會在那裏放置另一個,但它可能會覆蓋前一個。

此外,在你的代碼中,你所做的只是寫入應用程序範圍..這不是真的宣告另一個cfapplication。

幾個祕訣雖然...對於會話值你的大面積CFIF,只需使用cfparam:

<cfparam name="session.prop_st" default=""> 

,如果它不存在這樣的話,它會被創建。另外,如果您使用的是最新版本的ColdFusion,則無需在會話範圍內使用cflock。你應該鎖定應用範圍設置,但是因爲你在Application.cfm中設置它們,所以它很傻。我會使用另一個範圍,比如請求範圍。

在你的cfif cgi.script_name上,你不需要圍繞該變量的#號。你需要它們的唯一時間是當它們被引用或正在被輸出到cfoutput中時(或者當與Evaluate()一起使用來創建動態變量時)。

我希望這會有所幫助。

+1

有趣的是,這個答案被選爲解決方案,但甚至沒有試圖解決發佈的具體問題。 – 2012-02-06 20:07:54

+0

Rob,每個''標籤確實會啓動一個新的應用程序;兩個應用程序範圍都將存在,但只有當前命名的應用程序才能訪問。但是,如果回到第一個應用程序,它仍然會在那裏。底線,我認爲這不符合OP的想法。 – 2012-02-07 17:38:32

1

嗯,你可以在技術上做到這一點。結果將是,與第一個標記調用關聯的應用程序,客戶端和會話範圍將僅在第二個標記調用之前可用。此時,對這些範圍的所有後續引用都會引用後一個標記定義的上下文。然而,這並不是太多的情況下,這是一個好主意。

0

使用Sean Corfield的方法在擴展您的根Application.cfc的子文件夾中創建Application.cfc。

https://stackoverflow.com/a/307441/11047

你的根的Application.cfc將包含所有所需的主要應用程序和會話變量。您的子目錄的Application.cfc將包含您的「QSvalues」應用程序的所有應用程序和會話變量。但是,這些變量將位於application.qsValues和session.qsValues中。

application.qsValues.number,not application.number。 session.qsValues.prop_st,而不是session.prop_st。

這樣做,您可以擁有任意數量的「子應用程序」,但它們都將存在於一個APPLICATION.NAME中。

+0

注意OP詢問.cfm不是.cfc – 2012-02-06 20:09:16

+0

好的,那是真的。但是,這引出了問題,是否有可能將其轉換爲Application.cfc?如果是這樣,那麼答案是相關的。 – 2012-02-06 21:07:25

+0

我真的懷疑你可以在Application.cfc中有多個應用程序引用 - 'cfapplication'實際上並沒有在那裏使用,應用程序池是通過調用組件來建立的,並且使用'this'作用域來設置,就像這樣:'this.name =「FooApp」''''cfupplication name =「FooApp」>' – 2012-02-06 21:59:20

相關問題