1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
*/
namespace Zend\Mvc\View\Console;
use ArrayAccess;
use Zend\Mvc\MvcEvent;
use Zend\Mvc\View\Http\ViewManager as BaseViewManager;
/**
* Prepares the view layer for console applications
*/
class ViewManager extends BaseViewManager
{
/**
* Prepares the view layer
*
* Overriding, as several operations are omitted in the console view
* algorithms, as well as to ensure we pick up the Console variants
* of several listeners and strategies.
*
* @param \Zend\Mvc\MvcEvent $event
* @return void
*/
public function onBootstrap($event)
{
$application = $event->getApplication();
$services = $application->getServiceManager();
$events = $application->getEventManager();
$sharedEvents = $events->getSharedManager();
$this->config = $this->loadConfig($services->get('config'));
$this->services = $services;
$this->event = $event;
$routeNotFoundStrategy = $services->get('ConsoleRouteNotFoundStrategy');
$exceptionStrategy = $services->get('ConsoleExceptionStrategy');
$mvcRenderingStrategy = $services->get('ConsoleDefaultRenderingStrategy');
$createViewModelListener = new CreateViewModelListener();
$injectViewModelListener = new InjectViewModelListener();
$injectParamsListener = new InjectNamedConsoleParamsListener();
$this->registerMvcRenderingStrategies($events);
$this->registerViewStrategies();
$routeNotFoundStrategy->attach($events);
$exceptionStrategy->attach($events);
$events->attach(MvcEvent::EVENT_DISPATCH_ERROR, [$injectViewModelListener, 'injectViewModel'], -100);
$events->attach(MvcEvent::EVENT_RENDER_ERROR, [$injectViewModelListener, 'injectViewModel'], -100);
$mvcRenderingStrategy->attach($events);
$sharedEvents->attach('Zend\Stdlib\DispatchableInterface', MvcEvent::EVENT_DISPATCH, [$injectParamsListener, 'injectNamedParams'], 1000);
$sharedEvents->attach('Zend\Stdlib\DispatchableInterface', MvcEvent::EVENT_DISPATCH, [$createViewModelListener, 'createViewModelFromArray'], -80);
$sharedEvents->attach('Zend\Stdlib\DispatchableInterface', MvcEvent::EVENT_DISPATCH, [$createViewModelListener, 'createViewModelFromString'], -80);
$sharedEvents->attach('Zend\Stdlib\DispatchableInterface', MvcEvent::EVENT_DISPATCH, [$createViewModelListener, 'createViewModelFromNull'], -80);
$sharedEvents->attach('Zend\Stdlib\DispatchableInterface', MvcEvent::EVENT_DISPATCH, [$injectViewModelListener, 'injectViewModel'], -100);
}
/**
* Extract view manager configuration from the application's configuration
*
* @param array|ArrayAccess $configService
*
* @return array
*/
private function loadConfig($configService)
{
$config = [];
// override when console config is provided, otherwise use the standard definition
if (isset($configService['console']['view_manager'])) {
$config = $configService['console']['view_manager'];
} elseif (isset($configService['view_manager'])) {
$config = $configService['view_manager'];
}
return ($config instanceof ArrayAccess || is_array($config))
? $config
: [];
}
}