Zend_Layout 與 ActionStack 結合很美 !

假設有一段 layout script 內容是

<?php echo $this->layout()->menu; ?>
<?php echo $this->layout()->content; ?>

上面的 meuu 內容假設是會照資料庫而抓出動態選單 , 可以另外寫個 Controller 來作 , 例如 MenuController class MenuController extend Zend_Controller_Action {

extend Zend_Controller_Action {
	function indexAction() {
		/* 呼叫一些資料庫指令也 assign 一些東西給 viewscript  */
		$this->_helper->viewRenderer->setResponseSegment('menu');
	}
}

這個物件比較關鍵的是 setResponseSegment('menu') 那段 , 它定義了目前的 action 要 render 到 Response 物件中的 menu 區段去 , 因為有用了 Zend_Layout 的 MVC 模式 , 因此等於是定義輸出內容將會在 Layout Script 中的  menu 那段 現在我們真正的主 Controller 可以這麼個寫

class IndexController extend Zend_Controller_Action {
	function init() { 
		parent::init();
		$this->_helper->actionStack('index','menu');
	}
	function indexAction() {
		// 這是我主要的程式碼
	}
}

上面 IndexController 一開始初始化時就呼叫 actionStack , 這樣會讓目前的 controller/action 跑完之後 , 也會繼續去跑堆疊中的 controller/action 因此結果就很妙了 , IndexController/indexAction 的主要輸出內容將會是輸出到 $this->layout()->content , 而接著會去跑 MenuController/indexAction 且輸出到  $this->layout()->menu , 這樣整個網站的程式流程看起來就非常漂亮了 !!!

2 則評論在 Zend_Layout 與 ActionStack 結合很美 !.

發佈留言