2014-11-04 89 views
0

我試圖創建一個ZF2視圖幫助器,它輸出不同顯示格式的博客文章。 該帖子由標題,正文和頁腳組成。ZF2在視圖幫助器中嵌套視圖

我試圖在ZF2 docs中使用嵌套示例來創建視圖幫助程序。

//後幫手

public function __invoke(PostInterface $post, $is_single = true){ 
$view_model = new ViewModel(); 

$view_model->setTemplate('editorial/partials/complete'); 
$view_model->setVariable('object', $post); 
$view_model->setVariable('is_single', $is_single); 

$body_model = new ViewModel(); 
$body_model->setTemplate('editorial/partials/xx_display_format_partial_xx'); 
$body_model->setVariable('object', $post);  
$view_model->addChild($body_model, 'body'); 
... repeat for header and footer 

return $this->getView()->render($view_model); 
} 

//編輯/諧音/ complete.phtml

echo $this->header; 
echo $this->body; 
echo $this->footer; 

我呼應視圖助手時收到任何錯誤。問題是,也沒有輸出。

我試圖做甚至可能嗎?如果是這樣,我做錯了什麼?

+0

變量問題呢? – 2014-11-05 07:11:57

+0

沒有輸出 – L4DD13 2014-11-05 07:12:46

回答

1

嘗試這種解決方案https://stackoverflow.com/a/15193978/981820

它說,這實際上PphRenderer不會使孩子的意見。本教程從動作的角度展示了它的工作原理,它的工作原理是,在這種情況下,視圖由Zend \ View \ View :: render()

因此,解決您的問題的方法是渲染嵌套視圖就像它在那裏完成的一樣。

已更新

或者你可以做得更簡單。只需分別渲染您的視圖,並將每個輸出作爲變量附加到主視圖。看到一個例子:

$view = new ViewModel(); 
$body = new ViewModel(); 
$header = new ViewModel(); 
$footer = new ViewModel(); 

//... some setup 

$view->setVariable('body', $this->getView()->render($body)); 
$view->setVariable('header', $this->getView()->render($header)); 
$view->setVariable('footer', $this->getView()->render($footer)); 


return $this->getView()->render($view); 

它應該是相同的結果,並根據您的任務更優化。來自Zend \ View \ View :: render()的代碼之所以比這個更復雜,是因爲它監督了所有可能的情況,但是你不必爲你的任務做同樣的事情。

+0

這是我已經嘗試過的方法。它的工作原理,但我希望能夠使用下一個視圖模型方法。 現在,我將不得不使用這種方法。 謝謝 – L4DD13 2014-11-06 21:32:37

0

試試這個: 首先創建子模型,然後將子模型作爲的問題是不明確的,你說,你收到任何錯誤,但什麼是父模型

$body_model = new ViewModel(); 
$body_model->setTemplate('editorial/partials/xx_display_format_partial_xx'); 
$body_model->setVariable('object', $post);  

$view_model = new ViewModel(); 

$view_model->setTemplate('editorial/partials/complete'); 
$view_model->setVariable('object', $post); 
$view_model->setVariable('is_single', $is_single); 
$view_model->setVariable('body', $body_model);//<-----------------------------