e46649f879ed912212237f24cebb85a099d8d69f
[zf2.biz/galerie.git] / modules / Application / src / Application / Bootstrap.php
1 <?php
2 namespace Application;
3
4 use Zend\Config\Config,
5     Zend\Di\Configuration as DiConfiguration,
6     Zend\Di\Di,
7     Zend\EventManager\StaticEventManager,
8     Zend\Module\Manager as ModuleManager,
9     Zend\Mvc\Application;
10
11 class Bootstrap
12 {
13     protected $config;
14     protected $modules;
15
16     public function __construct(Config $config, ModuleManager $modules)
17     {
18         $this->config  = $config;
19         $this->modules = $modules; 
20     }
21
22     public function bootstrap(Application $app)
23     {
24         $this->setupLocator($app);
25         $this->setupRoutes($app);
26         $this->setupEvents($app);
27     }
28
29     protected function setupLocator(Application $app)
30     {
31         $di = new Di;
32         $di->instanceManager()->addTypePreference('Zend\Di\Locator', $di);
33
34         $config = new DiConfiguration($this->config->di);
35         $config->configure($di);
36
37         $app->setLocator($di);
38     }
39
40     protected function setupRoutes(Application $app)
41     {
42         $router = $app->getLocator()->get('Zend\Mvc\Router\SimpleRouteStack');
43         $router->addRoutes($this->config->routes->toArray());
44         $app->setRouter($router);
45     }
46
47     protected function setupEvents(Application $app)
48     {
49         $view         = $this->getView($app);
50         $locator      = $app->getLocator();
51         $events       = $app->events();
52         $staticEvents = StaticEventManager::getInstance();
53
54         foreach ($this->modules->getLoadedModules() as $name => $module) {
55             if (method_exists($module, 'registerApplicationListeners')) {
56                 $module->registerApplicationListeners($events, $locator, $this->config);
57             }
58
59             if (method_exists($module, 'registerStaticListeners')) {
60                 $module->registerStaticListeners($staticEvents, $locator, $this->config);
61             }
62         }
63     }
64
65     protected function getView($app)
66     {
67         $di     = $app->getLocator();
68         $view   = $di->get('view');
69         $url    = $view->plugin('url');
70         $url->setRouter($app->getRouter());
71
72         $view->plugin('headTitle')->setSeparator(' - ')
73                                   ->setAutoEscape(false)
74                                   ->append('Application');
75         return $view;
76     }
77 }