2013-06-26 52 views
0

我想寫一個簡單的CakePHP組件,將檢查一個PHP會話變量,並重定向到一個特定的位置,如果它沒有設置。這個函數將在多個控制器中使用,我只想爲它的代碼(DRY和全部)。CakePHP:呼叫控制器::重定向從組件

我遇到的問題是,蛋糕不會使Controller功能訪問組件,所以我不能撥打$this->redirect([routing array])

有沒有辦法解決這個問題?我寧願不添加一個返回語句到我必須在控制器中檢查的函數,因爲這是所有函數已經做的(1行if語句),並且看起來像是不必要的抽象層。我將把這個功能放在蛋糕之外的一個單獨的文件中,並且只需要將include添加到我需要這個功能的所有控制器中,作爲解決這個問題的方法。

回答

2

請檢查Components API

那裏你可以看到兩個回調

組件::初始化(控制器$控制器)

初始化方法在控制器的beforeFilter方法之前調用。

組件::啓動(控制器$控制器)

啓動方法在控制器的beforeFilter方法之後但在控制器之前調用執行當前操作處理程序。

所以,你可以使用初始化(控制器$控制器)或啓動(控制器$控制器)取決於你的需求(看來你需要使用初始化)以下列方式

function initialize(Controller $controller) { 
     $this->controller = $controller; 
    } 

以及後來的用戶在你的代碼中。 CakePHP發送當前控制器作爲$控制器的值

+0

完美運行。謝謝您的幫助! – Scott