2015-04-07 73 views
2

因此,對Controller :: redirect進行了更改,現在在您的控制器操作被調用後觸發。因此,如果你想在邏輯被觸發之前重定向某人(例如沒有登錄),那就不再可能了。有誰知道如何模擬舊的2.X行爲,其中調用Controller :: redirect會立即停止一切並重定向?Cakephp-3.0可能立即重定向?

+0

你可以不通過'$ this->在你的控制器動作中重定向('...')'嗎? (不知道的語法) –

+0

** http://book.cakephph.org/3.0/en/controllers.html#redirecting-to-other-pages** – ndm

+0

但它看起來像重新定向後可能工作,但返回;我從控制器調用的方法調用它...所以這不能解決我的問題。 – MiDri

回答

5

關鍵是return調用$this->redirect(),它會立即從控制器返回一個響應對象,使Dispatcher明白要立即terminante請求:

return $this->redirect($url); 

重定向可以從控制器動作本身或任何回調的控制器(beforeFilterbeforeRenderafterFilter ...)來完成。也可以從任何組件回調中返回重定向值。

0

有三種可能的方式來重定向用戶,如果他沒有登錄。我做了我的一個應用程序。首先是使用控制器的beforeFilter()。你可以使用像

public function beforeFilter(){ 
parent::beforeFilter(); 
if(empty($this->logged_in)){ 
    //your redirect code or your logic 
} 
} 

它在你的控制器動作被調用的第一時間執行。 其次,你可以創建一個類的構造函數。它也在第一時間執行。

public function __construct($request = null, $response = null) { 
    parent::__construct($request = null, $response = null); 
    //Your redirect code if user not logged in 
} 

您可以在AppController中編寫代碼beforeFilter();但是,如果您只想阻止未登錄的用戶訪問某些功能,則應使用Auth組件允許功能。語法是

$this->Auth->allow(array('action_name_1','action_name2')); 

粘貼此允許在beforeFilter函數功能。通過使用上述技巧,您可以阻止用戶訪問您的邏輯,如果他/她沒有登錄。

相關問題