2010-12-03 61 views
1

我一直在Zend Framework工作了一段時間,目前我正在重構我的代碼的一些部分。我想消除的一件大事是我的abstract控制器類,它啓動了許多變量,這些變量必須出現在我的所有控制器中,例如$success,$warning$error。這部分可以在控制器插件中完成,但將這些變量發送到相關視圖的最佳方式是什麼。目前我在我的abstract控制器類中使用自定義方法,我在所有控制器中調用該方法。ZendFramework從控制器發送變量到視圖(最佳版本)

protected function sendViewData(){ 
    $this->view->success = $this->success; 
    $this->view->warning = $this->warning; 
    $this->view->error = $this->error; 
} 

,然後將其稱爲throught

parent::sendViewData(); 

我一直在尋找通過插件控制器或任何更適合此

+0

請您澄清一下嗎?你想幫助製作一個插件控制器? – 2010-12-03 18:48:06

回答

5

您自動完成這一進程的所有我控制器的所有行動可以在抽象控制器中設置一個postDisplatch方法來初始化視圖數據(請參閱「調試前和調度後鉤子」一節)。

這樣一來,每個動作,你可以初始化$this->success$this->warnning$this->error變量,並在執行動作之後將它傳遞給視圖。

+1

但請記住,如果您重寫postDispatch方法,則必須在混凝土控制器中調用parent :: postDispatch()! – 2010-12-04 12:54:10

2

最佳pactice是,定義一個基本控制器,並讓其他控制器來擴展此,而不是直接調用的Zend_Controller_Action方法

// Your base controller file ApplicationController.php 
class ApplicationController extends Zend_Controller_Action { 
     // method & variable here are available in all controllers 
     public function preDispatch() { 
      $this->view->success = $this->success; 
      $this->view->warning = $this->warning; 
      $this->view->error = $this->error; 
     } 
} 

你的其他正常的控制器會是這樣

// IndexController.php 
class IndexController extends ApplicationController { 

} 

現在這些(成功,警告&錯誤)變量在所有視圖/佈局文件中都可用,在ApplicationController.php您還可以容納共享功能其他控制器。

相關問題