2010-05-18 23 views
0

我正在使用CAKEPHP框架的Web應用程序。爲此,我需要在多個頁面上請求一個變量(所有頁面都有不同的控制器)。很顯然,我得到了幾頁錯誤,因爲變量沒有在所有不同的控制器中聲明。單變量和多個控制器

是否有解決方法?我已經嘗試過app :: import來在另一個控制器中導入一個控制器,但是這似乎不起作用(仍然得到一個未定義的變量錯誤)。

Thnx爲您的合作!

問候, 西蒙

+0

cakephp的哪個版本正在使用? – 2010-05-18 11:36:18

回答

2

Duplicate question,但我認爲這是措辭更好一點,所以我會貼上我的答案在這裏:

站在deceze的評論和DavidYell的答案的肩膀上,我覺得他們已經設法抓出了你想要達成的目標。也許。因此,對於你所看到的以及你所擁有的東西有着寬鬆的理解......

默認情況下,PagesController::display()方法生成主頁視圖(home.ctp)。我懷疑這是你在說什麼。也就是說,您在SectionsController的方法中設置的變量將無法在您的主頁中使用,而該主頁是由不同控制器中的另一種方法創建的。如果你想提供給所有視圖的變量有幾件事情可以做:

  1. 您可以設置變量在config/core.php文件(一般不推薦使用)
  2. 你可以將它設置在如果它是一個常數。因此,我的意思是這是一個你將要硬編碼的值,而不是動態生成的值。您是否將變量創建爲常量無關緊要。
  3. 您可以在您的AppController中設置beforeFilter()beforeRender()方法。所有的自定義控制器(假設你已遵循協議)從AppController繼承。如果您選擇此路徑,請複製cake/libs/controller/app_controller.php並將其放入您的app/目錄中。

這些都是我認爲最能滿足您需求的方式,因爲我理解他們。

+0

嗯,我嘗試了所有三種解決方案,但沒有人會爲我工作.. :( – Simon 2010-05-18 12:03:38

+0

也許你可以更具體地瞭解你的應用場景,然後?所有這些都會使可變數據可用於視圖。如果它不存在,那麼我們可能需要更多的信息。 – 2010-05-18 13:22:30

0

的一種方式,以確保該變量是適用於所有的網頁是定義它的前端控制器(通常index.php)或任何其他總是包含的文件(如全球CONFIGS)上,另一個選擇可能是使用超級全球$_SESSION

0

如果您要訪問不同控制器的值,則需要將該值保存到數據庫記錄中,以便可以通過不同的控制器方法訪問該值。每個控制器調用都存在於其自己的上下文中,並且只能共享存儲在腳本外部的數據。

在這樣的情況下,我創建了一個首選表(帶有諸如id,name和value等字段)。然後將一個$ uses值添加到app_controller中,以使其可供所有控制器使用。最後,只需通過查找電話即可獲取。 (例如$ foo = $ this-> Preferences-> find('first',array('conditions'=> array('name'='foo')));