首頁 > Zend Framework > Zend_Layout 與 ActionStack 結合很美 !

Zend_Layout 與 ActionStack 結合很美 !

2008年11月15日 發表評論 閱讀評論

假設有一段 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 , 這樣整個網站的程式流程看起來就非常漂亮了 !!!

Categories: Zend Framework Tags:
  1. papacha
    2009年9月29日11:47 | #1

    找 zf 的資料找到您的網站來

    發現真的寶庫

    受用無窮!!!!

    非常感謝分享啊

  2. 2009年9月29日17:18 | #2

    其實 ZF 挺慢的說
    而且這招 …. 雖然方便 , 但會讓流程亂了
    我還是喜歡 YII 的 widget 作法

  1. 目前尚無任何 trackbacks 和 pingbacks。