2012-07-09 59 views
2

我無法理解何時使用Layout的變量以及何時使用View的變量來獲取頁面上的頁面段。這裏是圖片格式的Layout包教程($this意味着View實例比比皆是): enter image description here什麼是佈局和什麼是在ZF中查看?我應該何時和應該使用哪些變量?爲什麼?

爲什麼NavigationContentSidebar段得到的Layout變量?

$this->layout()->nav; 

HeadTitleHeadScriptHeadStylesheet的直線距離查看了?

$this->headTitle(); // I know that this is a placeholder view helper. 
        // But this segment of the page logically belongs to Layout. 
        // and it has to be called smth like view->layout->placeholder 

爲什麼HeaderFooter來自View的一些partial方法,但不是Layout的屬性?

$this->partial('header.phtml'); 

我試圖改變他們,兩種方式很好地工作:

echo $this->nav; // I assigned navigation segment script to the View and it works; 

我試圖Footer段腳本分配到Layout,它也可以工作:

$layout->footer = $footer; 
echo $this->layout()->footer; // it also works, it's displayed on the page 

任何的方式可能適用於頁面上的任何變量。例如,在Navigation細分受衆羣中,我有很多要顯示的變量,並且我可以使用兩種方式輸出它們 - 其中一個變量爲Layout的財產,另一個變量爲沙爾View的財產。

那麼使用它們的正確方法是什麼?我應該在什麼時候使用View的變量,何時使用Layout的變量?

回答

3

我同意這不是很清楚從文檔,我不認爲$this->layout()->nav是根本解釋。有幾個點,這可能有助於:

  • $this->layout()實際上是佈局視圖助手,它返回的Zend_Layout當前實例調用。
  • Zend_Layout註冊自己的佔位符助手(使用鍵'Zend_Layout'),並默認在此創建一個'content'變量。
  • Zend_Layout類有一個神奇的__get()方法,它將任何成員變量調用代理到其註冊的佔位符容器。所以調用$this->layout()->content是另一種寫作方式$this->placeholder('Zend_Layout')->content
  • Zend_Layout類也有一個神奇的__set()方法,它將存儲的數據代理到佔位符類。所以$layout->footer = 'foo'是與調用$this->placeholder('Zend_Layout')->footer = 'foo' in the view

考慮到這一點:

爲什麼導航,內容和側邊欄段得到的佈局變量?

由於這些訪問存儲在Zend_Layout的佔位符中的數據。您也可以使用$this->placeholder('Zend_Layout')->content

但HeadTitle,HeadScript,HeadStylesheet是從View中直接獲得的?

這些是查看助手。

爲什麼頁眉和頁腳是從視圖的一些部分方法而不是佈局的屬性?

這是從其他模板訪問內容的標準方式。

通常,假設使用視圖對象是訪問數據的正確方法。僅當您知道數據位於佈局佔位符中時才使用佈局對象/助手。

使用佔位符優於partials的優點是,您可以在多個不同位置(包括視圖本身)訪問和修改它們。例如,假設你有一個存儲在部分內容中的邊欄。如果你要保存這個在Zend_Layout的佔位符代替(例如在控制器插件),然後你可以覆蓋這個在控制器的某些動作:

public function someAction() 
{ 
    $this->view->layout()->sidebar = 'Some other sidebar content'; 
} 

或視圖中的腳本本身:

<?php $this->layout()->sidebar = 'Content for this page only'; ?> 
+0

非常感謝! – Green 2012-07-10 22:37:48

相關問題