1: <?php
2:
3: /*
4: * This file is part of the Symfony package.
5: *
6: * (c) Fabien Potencier <fabien@symfony.com>
7: *
8: * For the full copyright and license information, please view the LICENSE
9: * file that was distributed with this source code.
10: */
11:
12: namespace Symfony\Component\EventDispatcher;
13:
14: /**
15: * Event encapsulation class.
16: *
17: * Encapsulates events thus decoupling the observer from the subject they encapsulate.
18: *
19: * @author Drak <drak@zikula.org>
20: */
21: class GenericEvent extends Event implements \ArrayAccess, \IteratorAggregate
22: {
23: /**
24: * Observer pattern subject.
25: *
26: * @var mixed usually object or callable
27: */
28: protected $subject;
29:
30: /**
31: * Array of arguments.
32: *
33: * @var array
34: */
35: protected $arguments;
36:
37: /**
38: * Encapsulate an event with $subject and $args.
39: *
40: * @param mixed $subject The subject of the event, usually an object.
41: * @param array $arguments Arguments to store in the event.
42: */
43: public function __construct($subject = null, array $arguments = array())
44: {
45: $this->subject = $subject;
46: $this->arguments = $arguments;
47: }
48:
49: /**
50: * Getter for subject property.
51: *
52: * @return mixed $subject The observer subject.
53: */
54: public function getSubject()
55: {
56: return $this->subject;
57: }
58:
59: /**
60: * Get argument by key.
61: *
62: * @param string $key Key.
63: *
64: * @throws \InvalidArgumentException If key is not found.
65: *
66: * @return mixed Contents of array key.
67: */
68: public function getArgument($key)
69: {
70: if ($this->hasArgument($key)) {
71: return $this->arguments[$key];
72: }
73:
74: throw new \InvalidArgumentException(sprintf('%s not found in %s', $key, $this->getName()));
75: }
76:
77: /**
78: * Add argument to event.
79: *
80: * @param string $key Argument name.
81: * @param mixed $value Value.
82: *
83: * @return GenericEvent
84: */
85: public function setArgument($key, $value)
86: {
87: $this->arguments[$key] = $value;
88:
89: return $this;
90: }
91:
92: /**
93: * Getter for all arguments.
94: *
95: * @return array
96: */
97: public function getArguments()
98: {
99: return $this->arguments;
100: }
101:
102: /**
103: * Set args property.
104: *
105: * @param array $args Arguments.
106: *
107: * @return GenericEvent
108: */
109: public function setArguments(array $args = array())
110: {
111: $this->arguments = $args;
112:
113: return $this;
114: }
115:
116: /**
117: * Has argument.
118: *
119: * @param string $key Key of arguments array.
120: *
121: * @return boolean
122: */
123: public function hasArgument($key)
124: {
125: return array_key_exists($key, $this->arguments);
126: }
127:
128: /**
129: * ArrayAccess for argument getter.
130: *
131: * @param string $key Array key.
132: *
133: * @throws \InvalidArgumentException If key does not exist in $this->args.
134: *
135: * @return mixed
136: */
137: public function offsetGet($key)
138: {
139: return $this->getArgument($key);
140: }
141:
142: /**
143: * ArrayAccess for argument setter.
144: *
145: * @param string $key Array key to set.
146: * @param mixed $value Value.
147: */
148: public function offsetSet($key, $value)
149: {
150: $this->setArgument($key, $value);
151: }
152:
153: /**
154: * ArrayAccess for unset argument.
155: *
156: * @param string $key Array key.
157: */
158: public function offsetUnset($key)
159: {
160: if ($this->hasArgument($key)) {
161: unset($this->arguments[$key]);
162: }
163: }
164:
165: /**
166: * ArrayAccess has argument.
167: *
168: * @param string $key Array key.
169: *
170: * @return boolean
171: */
172: public function offsetExists($key)
173: {
174: return $this->hasArgument($key);
175: }
176:
177: /**
178: * IteratorAggregate for iterating over the object like an array
179: *
180: * @return \ArrayIterator
181: */
182: public function getIterator()
183: {
184: return new \ArrayIterator($this->arguments);
185: }
186: }
187: