我试图创建一个ZF2视图助手,输出不同显示格式的博客文章。 帖子由标题,正文和页脚组成。
我尝试使用ZF2 docs中的嵌套示例创建视图助手。
// post helper
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 );
}
// editorial / partials / complete.phtml
echo $this->header;
echo $this->body;
echo $this->footer;
回显视图助手时,我没有收到任何错误。问题是,也没有输出。
我尝试做的甚至可能吗?如果是这样,我做错了什么?
答案 0 :(得分: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()中的代码比这更复杂的原因是因为它监视所有可能的情况,但是你不必为你的任务做同样的事情。
答案 1 :(得分: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 );//<-----------------------------