更新:我寫了一些關於在PHP中使用標題的錯誤陳述;所以忘記那部分:)Cakephp內部重定向從控制器到另一個控制器
我想要的是從另一個控制器獲取並顯示控制器的視圖(與控制器的數據),而無需在瀏覽器中更改URL。
一些細節:因爲是直接重定向(通過瀏覽器)
- 重定向不會做的工作我需要這個東西,因爲我有一個內部重定向到其他控制器的控制器分派器。
我認爲唯一的(正確的)解決方案是在路由器:: connect 的/ config中使用routes.php,並使用調度器控制器中的邏輯。
更新:我寫了一些關於在PHP中使用標題的錯誤陳述;所以忘記那部分:)Cakephp內部重定向從控制器到另一個控制器
我想要的是從另一個控制器獲取並顯示控制器的視圖(與控制器的數據),而無需在瀏覽器中更改URL。
一些細節:因爲是直接重定向(通過瀏覽器)
我認爲唯一的(正確的)解決方案是在路由器:: connect 的/ config中使用routes.php,並使用調度器控制器中的邏輯。
ummm ... header()是用於重定向的函數,除非PHP文檔錯誤。 (http://php.net/manual/en/function.header.php)cakePHP中的核心使用重定向函數頭(參見cake/libs/controller.php的第721-730行)。
所以我不確定你的意思是「像正常的PHP」。 CakePHP是PHP,它只是建立在面向對象的代碼上。這不是魔術或扭曲的做事方式。所以要做一個重定向蛋糕,你可以簡單地使用:
$this->redirect(array('controller' => 'my_controller', 'action' => 'my_action'));
它會調用header()函數。
現在。如果你不想使用重定向(也許如果你要去一個外部站點),你可以調用代碼中的header()。只要確保你把exit();在標題呼叫之後:
header('Location: http://call/my/url');
exit();
它的工作原理與重定向一樣。這只是很多不必要的額外工作。請記住,使用重定向會自動維護域名併爲您構建網址。
是的,你是對的我混淆了標題的使用。 我正在儘快修復這個問題。 我需要一些像htaccess url重定向(及其透明度) – apelliciari 2010-11-20 16:22:07
FYI你可以使用頭也轉到相對路徑 – apelliciari 2010-11-21 10:28:05
通常,將URL連接到控制器是路由的工作。如果你的邏輯非常複雜,並且正常的路由不會削減它,你甚至可以編寫自己的路由解析器類,它可以執行更復雜的邏輯(這些都在手冊中)。
如果這個路由邏輯涉及數據庫查詢或任何其他類型的控制器邏輯,並可能導致基於某些內部狀態的相同URL的輸出會非常不同,但是您正在製作一個非常有用的RESTless應用程序,我會提交給您應該重新考慮你想要做的事情。話雖如此,您可以使用$this->render()
來呈現任何控制器操作的任何視圖。每個視圖的控制器邏輯可以放在AppController中,或者可能(部分)放置在從任何地方被調用的模型中。因此,與其「重定向到」不同的控制器,路由只是路由到特定的控制器操作,該操作動態調用它需要調用的代碼,然後呈現它需要呈現的視圖。
如果你希望你的應用保持在同一個URL上,但顯示的內容非常不同,你應該也可以考慮製作一個AJAX應用。
適合您的正確解決方案可能介於兩者之間。
「內部重寫」通常通過路由完成。你的「控制器調度員」有什麼特別之處,你不能用路由做同樣的事情? – deceze 2010-11-21 00:29:02
正如你所說,解決方案是做數據庫和路由之間的交互......但我不知道是否有可能 – apelliciari 2010-11-21 10:29:36
你想從另一個模型中的控制器動作顯示一個模型的數據? – Nigel 2010-11-21 10:45:53