19
19
use Zend \View \Model \ViewModel ;
20
20
use Zend \View \Renderer \PhpRenderer ;
21
21
use Zend \View \Renderer \RendererInterface ;
22
- use Zend \View \Resolver \AggregateResolver ;
23
22
24
23
use function get_class ;
25
24
use function gettype ;
32
31
* Template implementation bridging zendframework/zend-view.
33
32
*
34
33
* 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.
40
34
*/
41
35
class ZendViewRenderer implements TemplateRendererInterface
42
36
{
@@ -64,35 +58,27 @@ class ZendViewRenderer implements TemplateRendererInterface
64
58
* Allows specifying the renderer to use (any zend-view renderer is
65
59
* allowed), and optionally also the layout.
66
60
*
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
+ *
67
65
* The layout may be:
68
66
*
69
67
* - a string layout name
70
68
* - a ModelInterface instance representing the layout
71
69
*
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
74
71
* rendering.
75
72
*
76
- * @param null|RendererInterface $renderer
73
+ * @param RendererInterface $renderer
74
+ * @param NamespacedPathStackResolver $resolver
77
75
* @param null|string|ModelInterface $layout
78
- * @param null|string $defaultSuffix The default template file suffix, if any
79
76
* @throws Exception\InvalidArgumentException for invalid $layout types
80
77
*/
81
- public function __construct (RendererInterface $ renderer = null , $ layout = null , string $ defaultSuffix = null )
78
+ public function __construct (RendererInterface $ renderer, NamespacedPathStackResolver $ resolver , $ layout = null )
82
79
{
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 ;
96
82
97
83
if ($ layout && is_string ($ layout )) {
98
84
$ model = new ViewModel ();
@@ -108,11 +94,6 @@ public function __construct(RendererInterface $renderer = null, $layout = null,
108
94
));
109
95
}
110
96
111
- $ this ->renderer = $ renderer ;
112
- $ this ->resolver = $ this ->getNamespacedResolver ($ resolver );
113
- if (null !== $ defaultSuffix ) {
114
- $ this ->resolver ->setDefaultSuffix ($ defaultSuffix );
115
- }
116
97
$ this ->layout = $ layout ;
117
98
}
118
99
@@ -240,58 +221,6 @@ private function renderModel(
240
221
return $ renderer ->render ($ model );
241
222
}
242
223
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
-
295
224
/**
296
225
* Merge global/template parameters with provided view model.
297
226
*
0 commit comments