ZF2在View Helper中嵌套视图

时间:2014-11-04 20:14:32

标签: zend-framework2 partial-views view-helpers

我试图创建一个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;

回显视图助手时,我没有收到任何错误。问题是,也没有输出。

我尝试做的甚至可能吗?如果是这样,我做错了什么?

2 个答案:

答案 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 );//<-----------------------------