1010namespace Zend \Expressive \ZendView ;
1111
1212use Psr \Container \ContainerInterface ;
13- use Zend \Expressive \Helper \ServerUrlHelper as BaseServerUrlHelper ;
14- use Zend \Expressive \Helper \UrlHelper as BaseUrlHelper ;
15- use Zend \View \HelperPluginManager ;
1613use Zend \View \Renderer \PhpRenderer ;
17- use Zend \View \Resolver ;
1814
1915use function is_array ;
2016use function is_numeric ;
21- use function sprintf ;
2217
2318/**
2419 * Create and return a ZendView template instance.
2520 *
26- * Requires the Zend\Expressive\Router\RouterInterface service (for creating
27- * the UrlHelper instance).
28- *
29- * Optionally requires the Zend\View\HelperPluginManager service; if present,
30- * will use the service to inject the PhpRenderer instance.
31- *
3221 * Optionally uses the service 'config', which should return an array. This
3322 * factory consumes the following structure:
3423 *
4736 * ],
4837 * ]
4938 * </code>
50- *
51- * Injects the HelperPluginManager used by the PhpRenderer with zend-expressive
52- * overrides of the url and serverurl helpers.
5339 */
54- class ZendViewRendererFactory
40+ final class ZendViewRendererFactory
5541{
5642 public function __invoke (ContainerInterface $ container ) : ZendViewRenderer
5743 {
5844 $ config = $ container ->has ('config ' ) ? $ container ->get ('config ' ) : [];
5945 $ config = $ config ['templates ' ] ?? [];
6046
61-
62- // Configuration
63- $ resolver = new Resolver \AggregateResolver ();
64- $ resolver ->attach (
65- new Resolver \TemplateMapResolver ($ config ['map ' ] ?? []),
66- 100
67- );
68-
69- $ nsPathResolver = new NamespacedPathStackResolver ();
70- // Set default suffix
71- if (isset ($ config ['extension ' ])) {
72- $ nsPathResolver ->setDefaultSuffix ($ config ['extension ' ]);
73- }
74- $ resolver ->attach (
75- $ nsPathResolver ,
76- 0
77- );
78-
79- // Create or retrieve the renderer from the container
80- $ renderer = $ container ->has (PhpRenderer::class)
81- ? $ container ->get (PhpRenderer::class)
82- : new PhpRenderer ();
83- $ renderer ->setResolver ($ resolver );
84-
85- // Inject helpers
86- $ this ->injectHelpers ($ renderer , $ container );
47+ $ renderer = $ container ->get (PhpRenderer::class);
48+ $ nsPathResolver = $ container ->get (NamespacedPathStackResolver::class);
8749
8850 // Inject renderer
8951 $ view = new ZendViewRenderer ($ renderer , $ nsPathResolver , $ config ['layout ' ] ?? null );
@@ -99,56 +61,4 @@ public function __invoke(ContainerInterface $container) : ZendViewRenderer
9961
10062 return $ view ;
10163 }
102-
103- /**
104- * Inject helpers into the PhpRenderer instance.
105- *
106- * If a HelperPluginManager instance is present in the container, uses that;
107- * otherwise, instantiates one.
108- *
109- * In each case, injects with the custom url/serverurl implementations.
110- *
111- * @throws Exception\InvalidContainerException if the $container argument
112- * does not implement InteropContainerInterface.
113- * @throws Exception\MissingHelperException
114- */
115- private function injectHelpers (PhpRenderer $ renderer , ContainerInterface $ container ) : void
116- {
117- $ helpers = $ this ->retrieveHelperManager ($ container );
118- $ helpers ->setAlias ('url ' , BaseUrlHelper::class);
119- $ helpers ->setAlias ('Url ' , BaseUrlHelper::class);
120- $ helpers ->setFactory (BaseUrlHelper::class, function () use ($ container ) {
121- if (! $ container ->has (BaseUrlHelper::class)) {
122- throw new Exception \MissingHelperException (sprintf (
123- 'An instance of %s is required in order to create the "url" view helper; not found ' ,
124- BaseUrlHelper::class
125- ));
126- }
127- return new UrlHelper ($ container ->get (BaseUrlHelper::class));
128- });
129-
130- $ helpers ->setAlias ('serverurl ' , BaseServerUrlHelper::class);
131- $ helpers ->setAlias ('serverUrl ' , BaseServerUrlHelper::class);
132- $ helpers ->setAlias ('ServerUrl ' , BaseServerUrlHelper::class);
133- $ helpers ->setFactory (BaseServerUrlHelper::class, function () use ($ container ) {
134- if (! $ container ->has (BaseServerUrlHelper::class)) {
135- throw new Exception \MissingHelperException (sprintf (
136- 'An instance of %s is required in order to create the "url" view helper; not found ' ,
137- BaseServerUrlHelper::class
138- ));
139- }
140- return new ServerUrlHelper ($ container ->get (BaseServerUrlHelper::class));
141- });
142-
143- $ renderer ->setHelperPluginManager ($ helpers );
144- }
145-
146- private function retrieveHelperManager (ContainerInterface $ container ) : HelperPluginManager
147- {
148- if ($ container ->has (HelperPluginManager::class)) {
149- return $ container ->get (HelperPluginManager::class);
150- }
151-
152- return new HelperPluginManager ($ container );
153- }
15464}
0 commit comments