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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?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\View\Helper\Placeholder;
use Zend\View\Exception;
/**
* Registry for placeholder containers
*/
class Registry
{
/**
* Singleton instance
*
* @var Registry
*/
protected static $instance;
/**
* Default container class
*
* @var string
*/
protected $containerClass = 'Zend\View\Helper\Placeholder\Container';
/**
* Placeholder containers
*
* @var array
*/
protected $items = [];
/**
* Retrieve or create registry instance
*
* @return Registry
*/
public static function getRegistry()
{
trigger_error('Placeholder view helpers should no longer use a singleton registry', E_USER_DEPRECATED);
if (null === static::$instance) {
static::$instance = new static();
}
return static::$instance;
}
/**
* Unset the singleton
*
* Primarily useful for testing purposes; sets {@link $instance} to null.
*
* @return void
*/
public static function unsetRegistry()
{
trigger_error('Placeholder view helpers should no longer use a singleton registry', E_USER_DEPRECATED);
static::$instance = null;
}
/**
* Set the container for an item in the registry
*
* @param string $key
* @param Container\AbstractContainer $container
* @return Registry
*/
public function setContainer($key, Container\AbstractContainer $container)
{
$key = (string) $key;
$this->items[$key] = $container;
return $this;
}
/**
* Retrieve a placeholder container
*
* @param string $key
* @return Container\AbstractContainer
*/
public function getContainer($key)
{
$key = (string) $key;
if (isset($this->items[$key])) {
return $this->items[$key];
}
$container = $this->createContainer($key);
return $container;
}
/**
* Does a particular container exist?
*
* @param string $key
* @return bool
*/
public function containerExists($key)
{
$key = (string) $key;
return array_key_exists($key, $this->items);
}
/**
* createContainer
*
* @param string $key
* @param array $value
* @return Container\AbstractContainer
*/
public function createContainer($key, array $value = [])
{
$key = (string) $key;
$this->items[$key] = new $this->containerClass($value);
return $this->items[$key];
}
/**
* Delete a container
*
* @param string $key
* @return bool
*/
public function deleteContainer($key)
{
$key = (string) $key;
if (isset($this->items[$key])) {
unset($this->items[$key]);
return true;
}
return false;
}
/**
* Set the container class to use
*
* @param string $name
* @throws Exception\InvalidArgumentException
* @throws Exception\DomainException
* @return Registry
*/
public function setContainerClass($name)
{
if (! class_exists($name)) {
throw new Exception\DomainException(
sprintf(
'%s expects a valid registry class name; received "%s", which did not resolve',
__METHOD__,
$name
)
);
}
if (! in_array('Zend\View\Helper\Placeholder\Container\AbstractContainer', class_parents($name))) {
throw new Exception\InvalidArgumentException('Invalid Container class specified');
}
$this->containerClass = $name;
return $this;
}
/**
* Retrieve the container class
*
* @return string
*/
public function getContainerClass()
{
return $this->containerClass;
}
}