Skip to content

Commit f498439

Browse files
author
Kyle Spraggs
committed
Properly using TreeRendererInterface instead of the ViewModel injection hack.
1 parent fc5286d commit f498439

File tree

3 files changed

+39
-11
lines changed

3 files changed

+39
-11
lines changed

src/ZfcTwig/Module.php

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,6 @@ public function onBootstrap(MvcEvent $e)
3434

3535
$environment->addExtension($extension);
3636
}
37-
38-
if ($config['disable_zf_model']) {
39-
$events = $application->getEventManager();
40-
$sharedEvents = $events->getSharedManager();
41-
$vmListener = new InjectViewModelListener($serviceManager->get('ZfcTwigRenderer'));
42-
43-
$events->attach(MvcEvent::EVENT_DISPATCH_ERROR, array($vmListener, 'injectViewModel'), -99);
44-
$sharedEvents->attach('Zend\Stdlib\DispatchableInterface', MvcEvent::EVENT_DISPATCH, array($vmListener, 'injectViewModel'), -99);
45-
}
4637
}
4738

4839
public function getServiceConfig()

src/ZfcTwig/Service/ViewTwigRendererFactory.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,15 @@ class ViewTwigRendererFactory implements FactoryInterface
1616
*/
1717
public function createService(ServiceLocatorInterface $serviceLocator)
1818
{
19+
$config = $serviceLocator->get('Configuration');
20+
$config = $config['zfctwig'];
21+
1922
$renderer = new TwigRenderer(
2023
$serviceLocator->get('ZfcTwigEnvironment'),
2124
$serviceLocator->get('ZfcTwigResolver')
2225
);
2326

27+
$renderer->setCanRenderTrees($config['disable_zf_model']);
2428
$renderer->setHelperPluginManager($serviceLocator->get('ZfcTwigViewHelperManager'));
2529

2630
return $renderer;

src/ZfcTwig/View/Renderer/TwigRenderer.php

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,17 @@
77
use Zend\View\HelperPluginManager;
88
use Zend\View\Model\ModelInterface;
99
use Zend\View\Renderer\RendererInterface;
10+
use Zend\View\Renderer\TreeRendererInterface;
1011
use Zend\View\Resolver\ResolverInterface;
1112
use ZfcTwig\View\Resolver\TwigResolver;
1213

13-
class TwigRenderer implements RendererInterface
14+
class TwigRenderer implements RendererInterface, TreeRendererInterface
1415
{
16+
/**
17+
* @var bool
18+
*/
19+
protected $canRenderTrees = true;
20+
1521
/**
1622
* @var Twig_Environment
1723
*/
@@ -66,6 +72,26 @@ public function __call($method, $argv)
6672
return $this->__pluginCache[$method];
6773
}
6874

75+
/**
76+
* @param boolean $canRenderTrees
77+
* @return boolean
78+
*/
79+
public function setCanRenderTrees($canRenderTrees)
80+
{
81+
$this->canRenderTrees = $canRenderTrees;
82+
return $this;
83+
}
84+
85+
/**
86+
* Indicate whether the renderer is capable of rendering trees of view models
87+
*
88+
* @return bool
89+
*/
90+
public function canRenderTrees()
91+
{
92+
return $this->canRenderTrees;
93+
}
94+
6995
/**
7096
* Get plugin instance, proxy to HelperPluginManager::get
7197
*
@@ -147,6 +173,8 @@ public function getHelperPluginManager()
147173
*/
148174
public function render($nameOrModel, $values = array())
149175
{
176+
$model = null;
177+
150178
if ($nameOrModel instanceof ModelInterface) {
151179
$model = $nameOrModel;
152180
$nameOrModel = $model->getTemplate();
@@ -160,11 +188,16 @@ public function render($nameOrModel, $values = array())
160188
$values = (array) $model->getVariables();
161189
}
162190

191+
$children = $model->getChildren();
192+
if ($this->canRenderTrees() && !empty($children)) {
193+
$nameOrModel = $children[0]->getTemplate();
194+
}
195+
163196
/** @var $template \Twig_Template */
164197
$template = $this->resolver->resolve($nameOrModel, $this);
165198
if ($template) {
166199
return $template->render($values);
167200
}
168201
return null;
169202
}
170-
}
203+
}

0 commit comments

Comments
 (0)