2012-07-15 36 views
3

我從控制器這樣的返回數據:ZF2:如何傳播控制器返回到佈局模板?

/** 
* Password request sent 
* 
* @return array 
*/ 
public function passwordRequestSentAction() 
{ 
    return array(
     'foo' => $this->bar, 
    ); 
} 

$this->foo是layout.phtml內空,即使它的正確內控制器/ passwordRequestSent.phtml

我不得不創建執行postDispatch方法我的抽象控制器並鏈接到attachDefaultListeners()並在postDispatch中執行此操作:

$e->getViewModel()->setVariables($e->getResult()->getVariables()); 

這真的是w ay去?我只是想分享我的所有變量,不管它的佈局或頁面模板。

+0

出於好奇 - 你爲什麼要這麼做? – Fge 2012-07-15 23:04:05

+0

@Fge我用佔位符解決了大部分需求。但我仍然有時可以看到需要。例如,我的項目中的每個.phtml都會傳遞一個$ messages數組並將它發送給一個幫助器,如$ this-> showMessages($ messages)。我在整個視圖腳本中都有一些樣板代碼,爲了減少它,我不得不開始使用partials(一個可行的解決方案,但我仍然需要將它稱爲每個視圖腳本),或者使佈局具有樣板代碼。 – Matsemann 2012-07-16 07:03:18

+0

是的,我在佈局頁眉中有一些邏輯,我想在所有頁面上分享。我想讓所有頁面上的所有代碼和邏輯都處於佈局狀態。不要在每個phtml文件中包含一些菜單標題。 – 2012-07-16 12:20:19

回答

2

可以通過調用$this->layout()訪問佈局模板:

class MyController extends AbstractActionController 
{ 
    public function myAction() 
    { 
     $layout = $this->layout(); 
     // Returns the ViewModel of the Layout 
    } 
} 

欲瞭解更多信息&樣品檢查the manual's examples

但是,在大多數情況下,我會建議爲這些任務編寫一個視圖幫助器 - 特別是對於導航/ ...這封裝了查看任務的控制器邏輯,如I want the navigation displayed hereShow me the user's login box。幾乎每種類型的狀態消息都一樣。

+0

錯過了這部分文檔,會看起來直通。謝謝。作爲第一印象,我可能需要重新思考如何做頁眉/頁腳。 – 2012-07-16 15:36:40

+0

@MarekNos你反思的結果是什麼? – tihe 2013-01-17 13:32:57