2014-11-04 102 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);//<-----------------------------