Overview

Namespaces

  • Charcoal
    • View
      • Mustache
      • Php
      • Twig

Classes

  • Charcoal\View\AbstractEngine
  • Charcoal\View\AbstractLoader
  • Charcoal\View\AbstractView
  • Charcoal\View\GenericView
  • Charcoal\View\Mustache\AssetsHelpers
  • Charcoal\View\Mustache\MustacheEngine
  • Charcoal\View\Mustache\MustacheLoader
  • Charcoal\View\Mustache\TranslatorHelpers
  • Charcoal\View\Php\PhpEngine
  • Charcoal\View\Php\PhpLoader
  • Charcoal\View\Renderer
  • Charcoal\View\Twig\TwigEngine
  • Charcoal\View\Twig\TwigLoader
  • Charcoal\View\ViewConfig
  • Charcoal\View\ViewServiceProvider

Interfaces

  • Charcoal\View\EngineInterface
  • Charcoal\View\LoaderInterface
  • Charcoal\View\Mustache\HelpersInterface
  • Charcoal\View\ViewableInterface
  • Charcoal\View\ViewInterface

Traits

  • Charcoal\View\ViewableTrait
  • Overview
  • Namespace
  • Class
  1: <?php
  2: 
  3: namespace Charcoal\View;
  4: 
  5: // Pimple dependencies
  6: use Pimple\ServiceProviderInterface;
  7: use Pimple\Container;
  8: 
  9: // Module `charcoal-view` dependencies
 10: use Charcoal\View\GenericView;
 11: use Charcoal\View\Mustache\MustacheEngine;
 12: use Charcoal\View\Mustache\MustacheLoader;
 13: use Charcoal\View\Mustache\AssetsHelpers;
 14: use Charcoal\View\Mustache\TranslatorHelpers;
 15: use Charcoal\View\Php\PhpEngine;
 16: use Charcoal\View\Php\PhpLoader;
 17: use Charcoal\View\Twig\TwigEngine;
 18: use Charcoal\View\Twig\TwigLoader;
 19: use Charcoal\View\Renderer;
 20: use Charcoal\View\ViewConfig;
 21: use Charcoal\View\ViewInterface;
 22: 
 23: /**
 24:  * View Service Provider
 25:  *
 26:  * ## Requirements / Dependencies
 27:  *
 28:  * - `config`
 29:  *   - The global / base app config (`ConfigInterface`).
 30:  * - `logger`
 31:  *   - A PSR-3 loger.
 32:  *
 33:  * ## Services
 34:  *
 35:  * - `view/config`
 36:  *   - The global view config (`ViewConfig`).
 37:  * - `view`
 38:  *   - The default `ViewInterface` object, determined by `view/config`.
 39:  * - `view/renderer`
 40:  *   - A PSR-7 renderer using the default `view` object.
 41:  *
 42:  * ## Helpers
 43:  *
 44:  * - `view/engine`
 45:  *   - The default `EngineInterface` object, determined by `view/config`.
 46:  * - `view/loader`
 47:  *   - The defailt `LoaderInterface` object, determined by `view/config`
 48:  *
 49:  */
 50: class ViewServiceProvider implements ServiceProviderInterface
 51: {
 52:     /**
 53:      * Registers services on the given container.
 54:      *
 55:      * This method should only be used to configure services and parameters.
 56:      * It should not get services.
 57:      *
 58:      * @param Container $container A container instance.
 59:      * @return void
 60:      */
 61:     public function register(Container $container)
 62:     {
 63:         $this->registerViewConfig($container);
 64:         $this->registerLoaderServices($container);
 65:         $this->registerEngineServices($container);
 66:         $this->registerMustacheTemplatingServices($container);
 67:         # $this->registerPhpTemplatingServices($container);
 68:         # $this->registerTwigTemplatingServices($container);
 69:         $this->registerViewServices($container);
 70:     }
 71: 
 72:     /**
 73:      * @param Container $container The DI container.
 74:      * @return void
 75:      */
 76:     protected function registerViewConfig(Container $container)
 77:     {
 78:         /**
 79:          * @param Container $container A container instance.
 80:          * @return ViewConfig
 81:          */
 82:         $container['view/config'] = function (Container $container) {
 83:             $config = $container['config']['view'];
 84: 
 85:             return new ViewConfig($config);
 86:         };
 87:     }
 88: 
 89:     /**
 90:      * @param Container $container The DI container.
 91:      * @return void
 92:      */
 93:     protected function registerLoaderServices(Container $container)
 94:     {
 95:         /**
 96:          * @param Container $container A container instance.
 97:          * @return array The view loader dependencies array.
 98:          */
 99:         $container['view/loader/dependencies'] = function (Container $container) {
100:             return [
101:                 'logger'    => $container['logger'],
102:                 'base_path' => $container['config']['base_path'],
103:                 'paths'     => $container['view/config']['paths']
104:             ];
105:         };
106: 
107:         /**
108:          * @param Container $container A container instance.
109:          * @return MustacheLoader
110:          */
111:         $container['view/loader/mustache'] = function (Container $container) {
112:             return new MustacheLoader($container['view/loader/dependencies']);
113:         };
114: 
115:         /**
116:          * @param Container $container A container instance.
117:          * @return PhpLoader
118:          */
119:         $container['view/loader/php'] = function (Container $container) {
120:             return new PhpLoader($container['view/loader/dependencies']);
121:         };
122: 
123:         /**
124:          * @param Container $container A container instance.
125:          * @return TwigLoader
126:          */
127:         $container['view/loader/twig'] = function (Container $container) {
128:             return new TwigLoader($container['view/loader/dependencies']);
129:         };
130:     }
131: 
132:     /**
133:      * @param Container $container The DI container.
134:      * @return void
135:      */
136:     protected function registerEngineServices(Container $container)
137:     {
138:         /**
139:          * @param Container $container A container instance.
140:          * @return array The engine dependencies array.
141:          */
142:         $container['view/engine/dependencies'] = function (Container $container) {
143:             return [
144:                 'logger' => $container['logger'],
145:                 'cache'  => null,
146:                 'loader' => null
147:             ];
148:         };
149: 
150:         /**
151:          * @param Container $container A container instance.
152:          * @return MustacheEngine
153:          */
154:         $container['view/engine/mustache'] = function (Container $container) {
155:             $engineOptions = $container['view/engine/dependencies'];
156:             $engineOptions['loader']  = $container['view/loader/mustache'];
157:             $engineOptions['helpers'] = $container['view/mustache/helpers'];
158:             return new MustacheEngine($engineOptions);
159:         };
160: 
161:         /**
162:          * @param Container $container A container instance.
163:          * @return PhpEngine
164:          */
165:         $container['view/engine/php'] = function (Container $container) {
166:             $engineOptions = $container['view/engine/dependencies'];
167:             $engineOptions['loader'] = $container['view/loader/php'];
168:             return new PhpEngine($engineOptions);
169:         };
170: 
171:         /**
172:          * @param Container $container A container instance.
173:          * @return TwigEngine
174:          */
175:         $container['view/engine/twig'] = function (Container $container) {
176:             $engineOptions = $container['view/engine/dependencies'];
177:             $engineOptions['loader'] = $container['view/loader/twig'];
178:             return new TwigEngine($engineOptions);
179:         };
180: 
181:         /**
182:          * The default view engine.
183:          *
184:          * @param Container $container A container instance.
185:          * @return \Charcoal\View\EngineInterface
186:          */
187:         $container['view/engine'] = function (Container $container) {
188:             $viewConfig = $container['view/config'];
189:             $type = $viewConfig['default_engine'];
190:             return $container['view/engine/'.$type];
191:         };
192:     }
193: 
194:     /**
195:      * @param Container $container The DI container.
196:      * @return void
197:      */
198:     protected function registerMustacheTemplatingServices(Container $container)
199:     {
200:         if (!isset($container['view/mustache/helpers'])) {
201:             $container['view/mustache/helpers'] = function () {
202:                 return [];
203:             };
204:         }
205: 
206:         /**
207:          * Add global helpers to the Mustache Engine.
208:          *
209:          * @param Container $container A container instance.
210:          * @return array
211:          */
212:         $container->extend('view/mustache/helpers', function (array $helpers, Container $container) {
213:             $deps = [];
214:             if (isset($container['translator'])) {
215:                 $deps['translator'] = $container['translator'];
216:             }
217: 
218:             $assets = new AssetsHelpers();
219:             $i18n   = new TranslatorHelpers($deps);
220: 
221:             return array_merge($helpers, $assets->toArray(), $i18n->toArray());
222:         });
223:     }
224: 
225:     /**
226:      * @param Container $container The DI container.
227:      * @return void
228:      */
229:     protected function registerViewServices(Container $container)
230:     {
231:         /**
232:          * The default view instance.
233:          *
234:          * @param Container $container A container instance.
235:          * @return ViewInterface
236:          */
237:         $container['view'] = function (Container $container) {
238:             return new GenericView([
239:                 'logger' => $container['logger'],
240:                 'engine' => $container['view/engine']
241:             ]);
242:         };
243: 
244:         /**
245:          * A PSR-7 renderer, using the default view instance.
246:          *
247:          * @param Container $container A container instance.
248:          * @return Renderer
249:          */
250:         $container['view/renderer'] = function (Container $container) {
251:             return new Renderer([
252:                 'view' => $container['view']
253:             ]);
254:         };
255:     }
256: }
257: 
API documentation generated by ApiGen