我正在使用CAKEPHP框架的Web應用程序。爲此,我需要在多個頁面上請求一個變量(所有頁面都有不同的控制器)。很顯然,我得到了幾頁錯誤,因爲變量沒有在所有不同的控制器中聲明。單變量和多個控制器
是否有解決方法?我已經嘗試過app :: import來在另一個控制器中導入一個控制器,但是這似乎不起作用(仍然得到一個未定義的變量錯誤)。
Thnx爲您的合作!
問候, 西蒙
我正在使用CAKEPHP框架的Web應用程序。爲此,我需要在多個頁面上請求一個變量(所有頁面都有不同的控制器)。很顯然,我得到了幾頁錯誤,因爲變量沒有在所有不同的控制器中聲明。單變量和多個控制器
是否有解決方法?我已經嘗試過app :: import來在另一個控制器中導入一個控制器,但是這似乎不起作用(仍然得到一個未定義的變量錯誤)。
Thnx爲您的合作!
問候, 西蒙
Duplicate question,但我認爲這是措辭更好一點,所以我會貼上我的答案在這裏:
站在deceze的評論和DavidYell的答案的肩膀上,我覺得他們已經設法抓出了你想要達成的目標。也許。因此,對於你所看到的以及你所擁有的東西有着寬鬆的理解......
默認情況下,
PagesController::display()
方法生成主頁視圖(home.ctp
)。我懷疑這是你在說什麼。也就是說,您在SectionsController
的方法中設置的變量將無法在您的主頁中使用,而該主頁是由不同控制器中的另一種方法創建的。如果你想提供給所有視圖的變量有幾件事情可以做:
- 您可以設置變量在
config/core.php
文件(一般不推薦使用)- 你可以將它設置在如果它是一個常數。因此,我的意思是這是一個你將要硬編碼的值,而不是動態生成的值。您是否將變量創建爲常量無關緊要。
- 您可以在您的
AppController
中設置beforeFilter()
或beforeRender()
方法。所有的自定義控制器(假設你已遵循協議)從AppController
繼承。如果您選擇此路徑,請複製cake/libs/controller/app_controller.php
並將其放入您的app/
目錄中。這些都是我認爲最能滿足您需求的方式,因爲我理解他們。
嗯,我嘗試了所有三種解決方案,但沒有人會爲我工作.. :( – Simon 2010-05-18 12:03:38
也許你可以更具體地瞭解你的應用場景,然後?所有這些都會使可變數據可用於視圖。如果它不存在,那麼我們可能需要更多的信息。 – 2010-05-18 13:22:30
的一種方式,以確保該變量是適用於所有的網頁是定義它的前端控制器(通常index.php
)或任何其他總是包含的文件(如全球CONFIGS)上,另一個選擇可能是使用超級全球$_SESSION
。
可以使用Configure.write ...更多信息here
可以憂色的beforeRender()
或beforeFilter()
callback methods從AppController。 :)
這些都會被每個頁面請求調用。:)
如果您要訪問不同控制器的值,則需要將該值保存到數據庫記錄中,以便可以通過不同的控制器方法訪問該值。每個控制器調用都存在於其自己的上下文中,並且只能共享存儲在腳本外部的數據。
在這樣的情況下,我創建了一個首選表(帶有諸如id,name和value等字段)。然後將一個$ uses值添加到app_controller中,以使其可供所有控制器使用。最後,只需通過查找電話即可獲取。 (例如$ foo = $ this-> Preferences-> find('first',array('conditions'=> array('name'='foo')));
cakephp的哪個版本正在使用? – 2010-05-18 11:36:18