1919use Zend \View \Model \ViewModel ;
2020use Zend \View \Renderer \PhpRenderer ;
2121use Zend \View \Renderer \RendererInterface ;
22- use Zend \View \Resolver \AggregateResolver ;
2322
2423use function get_class ;
2524use function gettype ;
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 */
4135class 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