1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
5: *
6: * Licensed under The MIT License
7: * For full copyright and license information, please see the LICENSE.txt
8: * Redistributions of files must retain the above copyright notice.
9: *
10: * @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
11: * @link https://cakephp.org CakePHP(tm) Project
12: * @since 3.0.10
13: * @license https://opensource.org/licenses/mit-license.php MIT License
14: */
15: namespace Cake\Event;
16:
17: /**
18: * Implements Cake\Event\EventDispatcherInterface.
19: */
20: trait EventDispatcherTrait
21: {
22: /**
23: * Instance of the Cake\Event\EventManager this object is using
24: * to dispatch inner events.
25: *
26: * @var \Cake\Event\EventManagerInterface|\Cake\Event\EventManager
27: */
28: protected $_eventManager;
29:
30: /**
31: * Default class name for new event objects.
32: *
33: * @var string
34: */
35: protected $_eventClass = Event::class;
36:
37: /**
38: * Returns the Cake\Event\EventManager manager instance for this object.
39: *
40: * You can use this instance to register any new listeners or callbacks to the
41: * object events, or create your own events and trigger them at will.
42: *
43: * @param \Cake\Event\EventManager|null $eventManager the eventManager to set
44: * @return \Cake\Event\EventManager
45: * @deprecated 3.5.0 Use getEventManager()/setEventManager() instead.
46: */
47: public function eventManager(EventManager $eventManager = null)
48: {
49: deprecationWarning(
50: 'EventDispatcherTrait::eventManager() is deprecated. ' .
51: 'Use EventDispatcherTrait::setEventManager()/getEventManager() instead.'
52: );
53: if ($eventManager !== null) {
54: $this->setEventManager($eventManager);
55: }
56:
57: return $this->getEventManager();
58: }
59:
60: /**
61: * Returns the Cake\Event\EventManager manager instance for this object.
62: *
63: * You can use this instance to register any new listeners or callbacks to the
64: * object events, or create your own events and trigger them at will.
65: *
66: * @return \Cake\Event\EventManager
67: */
68: public function getEventManager()
69: {
70: if ($this->_eventManager === null) {
71: $this->_eventManager = new EventManager();
72: }
73:
74: return $this->_eventManager;
75: }
76:
77: /**
78: * Returns the Cake\Event\EventManager manager instance for this object.
79: *
80: * You can use this instance to register any new listeners or callbacks to the
81: * object events, or create your own events and trigger them at will.
82: *
83: * @param \Cake\Event\EventManager $eventManager the eventManager to set
84: * @return $this
85: */
86: public function setEventManager(EventManager $eventManager)
87: {
88: $this->_eventManager = $eventManager;
89:
90: return $this;
91: }
92:
93: /**
94: * Wrapper for creating and dispatching events.
95: *
96: * Returns a dispatched event.
97: *
98: * @param string $name Name of the event.
99: * @param array|null $data Any value you wish to be transported with this event to
100: * it can be read by listeners.
101: * @param object|null $subject The object that this event applies to
102: * ($this by default).
103: *
104: * @return \Cake\Event\Event
105: */
106: public function dispatchEvent($name, $data = null, $subject = null)
107: {
108: if ($subject === null) {
109: $subject = $this;
110: }
111:
112: $event = new $this->_eventClass($name, $subject, $data);
113: $this->getEventManager()->dispatch($event);
114:
115: return $event;
116: }
117: }
118: