Update for new Zend\Di and Zend\Code stuff
[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\DefinitionList,
8     Zend\Di\Di,
9     Zend\EventManager\StaticEventManager,
10     Zend\Module\Manager as ModuleManager,
11     Zend\Mvc\Application;
12
13 class Bootstrap
14 {
15     protected $config;
16     protected $modules;
17
18     public function __construct(Config $config, ModuleManager $modules)
19     {
20         $this->config  = $config;
21         $this->modules = $modules; 
22     }
23
24     public function bootstrap(Application $app)
25     {
26         $this->setupLocator($app);
27         $this->setupRoutes($app);
28         $this->setupEvents($app);
29     }
30
31     protected function setupLocator(Application $app)
32     {
33         $definition = new Definition\RuntimeDefinition;
34         $definition->getIntrospectionStrategy()->setUseAnnotations(false);
35         $di = new Di(new DefinitionList($definition), null, new Configuration($this->config->di));
36         $di->instanceManager()->addTypePreference('Zend\Di\Locator', $di);
37         $app->setLocator($di);
38     }
39
40     protected function setupRoutes(Application $app)
41     {
42         $router = $app->getLocator()->get('Zend\Mvc\Router\SimpleRouteStack');
43         foreach ($this->config->routes as $name => $config) {
44             $class   = $config->type;
45             $options = $config->options;
46             $route   = new $class($options);
47             $router->addRoute($name, $route);
48         }
49         $app->setRouter($router);
50     }
51
52     protected function setupEvents(Application $app)
53     {
54         $view         = $this->getView($app);
55         $locator      = $app->getLocator();
56         $events       = $app->events();
57         $staticEvents = StaticEventManager::getInstance();
58
59         foreach ($this->modules->getLoadedModules() as $name => $module) {
60             if (method_exists($module, 'registerApplicationListeners')) {
61                 $module->registerApplicationListeners($events, $locator, $this->config);
62             }
63
64             if (method_exists($module, 'registerStaticListeners')) {
65                 $module->registerStaticListeners($staticEvents, $locator, $this->config);
66             }
67         }
68     }
69
70     protected function getView($app)
71     {
72         $di     = $app->getLocator();
73         $view   = $di->get('view');
74         $url    = $view->plugin('url');
75         $url->setRouter($app->getRouter());
76
77         $view->plugin('headTitle')->setSeparator(' - ')
78                                   ->setAutoEscape(false)
79                                   ->append('Application');
80         return $view;
81     }
82 }