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