未加星标

Trouble Adding a Child to ViewModel in Zend Framework 2

字体大小 | |
[开发(php) 所属分类 开发(php) | 发布者 店小二04 | 时间 2019 | 作者 红领巾 ] 0人收藏点击收藏

I'm trying out child view models for zend framework 2 and for some reason my child view isn't rendering. The $this->content ends up with no content.

My script

use Zend\View\RendererphpRenderer; use Zend\View\Resolver; use Zend\View\Model\ViewModel; $renderer = new PhpRenderer(); $resolver = new Resolver\AggregateResolver(); $renderer->setResolver($resolver); $map = new Resolver\TemplateMapResolver(array( 'layout' => APP_PATH . '/views/layouts/test-layout.phtml', 'test1' => APP_PATH . '/views/scripts/test1.phtml', 'test2' => APP_PATH . '/views/scripts/test2.phtml', )); $stack = new Resolver\TemplatePathStack(array( 'script_paths' => array( APP_PATH . '/views/scripts', ) )); $resolver->attach($map) // this will be consulted first ->attach($stack); $layout = new ViewModel(); $layout->setTemplate('layout'); $model = new ViewModel(array( 'name' => '<h1>World</h1>', 'date' => date('Y-m-d'), )); $model->setTemplate('test1'); $layout->addChild($model, 'content'); echo $renderer->render($layout);

My "layout" file

<!DOCTYPE html> <html lang="en"> <head> <title>Testing layouts and nested view models</title> </head> <body> <div class='container'> <?php echo $this->content; ?> </div> </body> </html>

My "test1" view

<p>Hello <?php echo $this->escapeHtml($this->name); ?>, its <?php echo $this->date; ?></p>

Output

<!DOCTYPE html> <html lang="en"> <head> <title>Testing layouts and nested view models</title> </head> <body> <div class='container'> </div> </body> </html>

Expected output

<!DOCTYPE html> <html lang="en"> <head> <title>Testing layouts and nested view models</title> </head> <body> <div class='container'><p>Hello <h1>World</h1>, its 2013-10-10</p> </div> </body> </html>

So I solved it like this, taken from Zend\View\View but I'm wondering if there is an easier way or a component that ZF2 already provides.

class View { protected $renderer; public function setRenderer(Zend\View\Renderer\RendererInterface $renderer) { $this->renderer = $renderer; } public function render(Zend\View\Model\ModelInterface $model) { $renderer = $this->renderer; if ($model->hasChildren() && (!$renderer instanceof TreeRendererInterface || !$renderer->canRenderTrees()) ) { $this->renderChildren($model); } $rendered = $renderer->render($model); return $rendered; } protected function renderChildren(Zend\View\Model\ModelInterface $model) { foreach ($model as $child) { if ($child->terminate()) { throw new Exception\DomainException('Inconsistent state; child view model is marked as terminal'); } $child->setOption('has_parent', true); $result = $this->render($child); $child->setOption('has_parent', null); $capture = $child->captureTo(); if (!empty($capture)) { if ($child->isAppend()) { $oldResult=$model->{$capture}; $model->setVariable($capture, $oldResult . $result); } else { $model->setVariable($capture, $result); } } } } }

then in my code

$view = new View(); $view->setRenderer($renderer); echo $view->render($layout);

本文开发(php)相关术语:php代码审计工具 php开发工程师 移动开发者大会 移动互联网开发 web开发工程师 软件开发流程 软件开发工程师

代码区博客精选文章
分页:12
转载请注明
本文标题:Trouble Adding a Child to ViewModel in Zend Framework 2
本站链接:https://www.codesec.net/view/628239.html


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 开发(php) | 评论(0) | 阅读(98)