blob: cb20541157c721ec6334b4a3be83152c1dc6af7b (
plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
<?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\Service;
use Zend\Console\Console;
use Zend\Mvc\Exception;
use Zend\Mvc\Router\RouteMatch;
use Zend\ServiceManager\ConfigInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Zend\View\Helper as ViewHelper;
use Zend\View\Helper\HelperInterface as ViewHelperInterface;
class ViewHelperManagerFactory extends AbstractPluginManagerFactory
{
const PLUGIN_MANAGER_CLASS = 'Zend\View\HelperPluginManager';
/**
* An array of helper configuration classes to ensure are on the helper_map stack.
*
* @var array
*/
protected $defaultHelperMapClasses = array(
'Zend\Form\View\HelperConfig',
'Zend\I18n\View\HelperConfig',
'Zend\Navigation\View\HelperConfig'
);
/**
* Create and return the view helper manager
*
* @param ServiceLocatorInterface $serviceLocator
* @return ViewHelperInterface
* @throws Exception\RuntimeException
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{
$plugins = parent::createService($serviceLocator);
foreach ($this->defaultHelperMapClasses as $configClass) {
if (is_string($configClass) && class_exists($configClass)) {
$config = new $configClass;
if (!$config instanceof ConfigInterface) {
throw new Exception\RuntimeException(sprintf(
'Invalid service manager configuration class provided; received "%s", expected class implementing %s',
$configClass,
'Zend\ServiceManager\ConfigInterface'
));
}
$config->configureServiceManager($plugins);
}
}
// Configure URL view helper with router
$plugins->setFactory('url', function () use ($serviceLocator) {
$helper = new ViewHelper\Url;
$router = Console::isConsole() ? 'HttpRouter' : 'Router';
$helper->setRouter($serviceLocator->get($router));
$match = $serviceLocator->get('application')
->getMvcEvent()
->getRouteMatch()
;
if ($match instanceof RouteMatch) {
$helper->setRouteMatch($match);
}
return $helper;
});
$plugins->setFactory('basepath', function () use ($serviceLocator) {
$config = $serviceLocator->has('Config') ? $serviceLocator->get('Config') : array();
$basePathHelper = new ViewHelper\BasePath;
if (Console::isConsole()
&& isset($config['view_manager'])
&& isset($config['view_manager']['base_path_console'])
) {
$basePathHelper->setBasePath($config['view_manager']['base_path_console']);
return $basePathHelper;
}
if (isset($config['view_manager']) && isset($config['view_manager']['base_path'])) {
$basePathHelper->setBasePath($config['view_manager']['base_path']);
return $basePathHelper;
}
$request = $serviceLocator->get('Request');
if (is_callable(array($request, 'getBasePath'))) {
$basePathHelper->setBasePath($request->getBasePath());
}
return $basePathHelper;
});
/**
* Configure doctype view helper with doctype from configuration, if available.
*
* Other view helpers depend on this to decide which spec to generate their tags
* based on. This is why it must be set early instead of later in the layout phtml.
*/
$plugins->setFactory('doctype', function () use ($serviceLocator) {
$config = $serviceLocator->has('Config') ? $serviceLocator->get('Config') : array();
$config = isset($config['view_manager']) ? $config['view_manager'] : array();
$doctypeHelper = new ViewHelper\Doctype;
if (isset($config['doctype']) && $config['doctype']) {
$doctypeHelper->setDoctype($config['doctype']);
}
return $doctypeHelper;
});
return $plugins;
}
}
|