代码区项目交易流程

Trouble Adding a Child to ViewModel in Zend Framework 2


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开发工程师 软件开发流程 软件开发工程师

点击收藏

LAST Full name search in column search x-mas tRees with gganimate, ggplot, plotly and friends NEXT