Skip to content
This repository was archived by the owner on Jan 21, 2020. It is now read-only.

Commit 37a6507

Browse files
committed
Drop fallback zend-view renderer setup from template renderer
1 parent 1b17147 commit 37a6507

File tree

2 files changed

+50
-144
lines changed

2 files changed

+50
-144
lines changed

src/ZendViewRenderer.php

Lines changed: 10 additions & 81 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
use Zend\View\Model\ViewModel;
2020
use Zend\View\Renderer\PhpRenderer;
2121
use Zend\View\Renderer\RendererInterface;
22-
use Zend\View\Resolver\AggregateResolver;
2322

2423
use function get_class;
2524
use function gettype;
@@ -32,11 +31,6 @@
3231
* Template implementation bridging zendframework/zend-view.
3332
*
3433
* This implementation provides additional capabilities.
35-
*
36-
* First, it always ensures the resolver is an AggregateResolver, pushing any
37-
* non-Aggregate into a new AggregateResolver instance. Additionally, it always
38-
* registers a NamespacedPathStackResolver at priority 0 (lower than
39-
* default) in the Aggregate to ensure we can add and resolve namespaced paths.
4034
*/
4135
class ZendViewRenderer implements TemplateRendererInterface
4236
{
@@ -64,35 +58,27 @@ class ZendViewRenderer implements TemplateRendererInterface
6458
* Allows specifying the renderer to use (any zend-view renderer is
6559
* allowed), and optionally also the layout.
6660
*
61+
* Renderer is expected to be already configured with NamespacedPathStackResolver,
62+
* typically in AggregateResolver at priority 0 (lower than default), to
63+
* ensure we can add and resolve namespaced paths.
64+
*
6765
* The layout may be:
6866
*
6967
* - a string layout name
7068
* - a ModelInterface instance representing the layout
7169
*
72-
* If no renderer is provided, a default PhpRenderer instance is created;
73-
* omitting the layout indicates no layout should be used by default when
70+
* Omitting the layout indicates no layout should be used by default when
7471
* rendering.
7572
*
76-
* @param null|RendererInterface $renderer
73+
* @param RendererInterface $renderer
74+
* @param NamespacedPathStackResolver $resolver
7775
* @param null|string|ModelInterface $layout
78-
* @param null|string $defaultSuffix The default template file suffix, if any
7976
* @throws Exception\InvalidArgumentException for invalid $layout types
8077
*/
81-
public function __construct(RendererInterface $renderer = null, $layout = null, string $defaultSuffix = null)
78+
public function __construct(RendererInterface $renderer, NamespacedPathStackResolver $resolver, $layout = null)
8279
{
83-
if (null === $renderer) {
84-
$renderer = $this->createRenderer();
85-
$resolver = $renderer->resolver();
86-
} else {
87-
$resolver = $renderer->resolver();
88-
if (! $resolver instanceof AggregateResolver) {
89-
$aggregate = $this->getDefaultResolver();
90-
$aggregate->attach($resolver);
91-
$resolver = $aggregate;
92-
} elseif (! $this->hasNamespacedResolver($resolver)) {
93-
$this->injectNamespacedResolver($resolver);
94-
}
95-
}
80+
$this->renderer = $renderer;
81+
$this->resolver = $resolver;
9682

9783
if ($layout && is_string($layout)) {
9884
$model = new ViewModel();
@@ -108,11 +94,6 @@ public function __construct(RendererInterface $renderer = null, $layout = null,
10894
));
10995
}
11096

111-
$this->renderer = $renderer;
112-
$this->resolver = $this->getNamespacedResolver($resolver);
113-
if (null !== $defaultSuffix) {
114-
$this->resolver->setDefaultSuffix($defaultSuffix);
115-
}
11697
$this->layout = $layout;
11798
}
11899

@@ -240,58 +221,6 @@ private function renderModel(
240221
return $renderer->render($model);
241222
}
242223

243-
/**
244-
* Returns a PhpRenderer object
245-
*/
246-
private function createRenderer() : PhpRenderer
247-
{
248-
$renderer = new PhpRenderer();
249-
$renderer->setResolver($this->getDefaultResolver());
250-
return $renderer;
251-
}
252-
253-
/**
254-
* Get the default resolver
255-
*/
256-
private function getDefaultResolver() : AggregateResolver
257-
{
258-
$resolver = new AggregateResolver();
259-
$this->injectNamespacedResolver($resolver);
260-
return $resolver;
261-
}
262-
263-
/**
264-
* Attaches a new NamespacedPathStackResolver to the AggregateResolver
265-
*
266-
* A priority of 0 is used, to ensure it is the last queried.
267-
*/
268-
private function injectNamespacedResolver(AggregateResolver $aggregate) : void
269-
{
270-
$aggregate->attach(new NamespacedPathStackResolver(), 0);
271-
}
272-
273-
private function hasNamespacedResolver(AggregateResolver $aggregate) : bool
274-
{
275-
foreach ($aggregate as $resolver) {
276-
if ($resolver instanceof NamespacedPathStackResolver) {
277-
return true;
278-
}
279-
}
280-
281-
return false;
282-
}
283-
284-
private function getNamespacedResolver(AggregateResolver $aggregate) : ?NamespacedPathStackResolver
285-
{
286-
foreach ($aggregate as $resolver) {
287-
if ($resolver instanceof NamespacedPathStackResolver) {
288-
return $resolver;
289-
}
290-
}
291-
292-
return null;
293-
}
294-
295224
/**
296225
* Merge global/template parameters with provided view model.
297226
*

0 commit comments

Comments
 (0)