2012-09-19 57 views
1

我通常在第一的Application.cfc行設置應用程序範圍的數據源名稱:更改的「全局」數據源動態

<cfscript>THIS.datasource="mydsn";</cfscript> 

如果我需要改變它在我的代碼某部分是什麼?

具體而言,我的意思是:

  • 如果cgi.server_name等於 「www.firsturl.com」=> this.datasource = 「firstdsn」
  • 如果cgi.server_name等於「WWW .secondurl.com「=> this.datasource =」seconddsn「

我可以爲每個請求執行此操作嗎?

+3

這將是很容易讓你簡單地測試,看看會發生什麼,肯定?只要把有條件在你的'this.datasource'聲明在你的Application.cfc ... –

回答

5

好的,我對你原來的帖子發表評論 - 儘管找出這些東西的最好方法就是試試吧看看會發生什麼,答案是:是的。

的Application.cfc甚少命名的,因爲這意味着它是一種專用的,但在現實中,整個事情被實例化每一個要求。一些事件處理程序只在給定的情況下運行(onApplicationStart/onSessionStart等)既不在這裏,也不在那裏:整個事件運行每個請求。因此,與任何正在實例化的CFC一樣,僞構造函數代碼(您在此範圍內創建變量聲明的位置)也會運行每個請求。

這意味着,是的,你可以有條件地設置任何基於特定請求信息的變量(請求,CGI,網址,表格等;但不應用或會話)。所以你基於CGI變量的條件就可以正常工作。

但是,不要把我的話:試試吧!總是嘗試這些東西。

最後,只需插上就咯,我將討論當事情的Application.cfc在一定的深度在我的博客上運行,在this article。也許給它一個閱讀,也許看看Application.cfc上的其他文章,而你在那裏。

+0

我沒有測試過這一點,但我會假定護理使用這種方法,如果有任何疑問都onSessionEnd的內部發生是必需的,因爲CGI範圍不會有預期的值。 – nosilleg

+0

哦...好點。我會調查... –

+1

是的,有一些古怪(而不是人們會想到的)。太多(而不是主題)需要經過,但是我在我的博客上覆蓋了它:http://adamcameroncoldfusion.blogspot.co.uk/2012/09/curious-behaviour-with-this-scoped.html –