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: /**
24: * Instance of the Cake\Event\EventManager this object is using
25: * to dispatch inner events.
26: *
27: * @var \Cake\Event\EventManagerInterface|\Cake\Event\EventManager
28: */
29: protected $_eventManager;
30:
31: /**
32: * Default class name for new event objects.
33: *
34: * @var string
35: */
36: protected $_eventClass = Event::class;
37:
38: /**
39: * Returns the Cake\Event\EventManager manager instance for this object.
40: *
41: * You can use this instance to register any new listeners or callbacks to the
42: * object events, or create your own events and trigger them at will.
43: *
44: * @param \Cake\Event\EventManager|null $eventManager the eventManager to set
45: * @return \Cake\Event\EventManager
46: * @deprecated 3.5.0 Use getEventManager()/setEventManager() instead.
47: */
48: public function eventManager(EventManager $eventManager = null)
49: {
50: deprecationWarning(
51: 'EventDispatcherTrait::eventManager() is deprecated. ' .
52: 'Use EventDispatcherTrait::setEventManager()/getEventManager() instead.'
53: );
54: if ($eventManager !== null) {
55: $this->setEventManager($eventManager);
56: }
57:
58: return $this->getEventManager();
59: }
60:
61: /**
62: * Returns the Cake\Event\EventManager manager instance for this object.
63: *
64: * You can use this instance to register any new listeners or callbacks to the
65: * object events, or create your own events and trigger them at will.
66: *
67: * @return \Cake\Event\EventManager
68: */
69: public function getEventManager()
70: {
71: if ($this->_eventManager === null) {
72: $this->_eventManager = new EventManager();
73: }
74:
75: return $this->_eventManager;
76: }
77:
78: /**
79: * Returns the Cake\Event\EventManager manager instance for this object.
80: *
81: * You can use this instance to register any new listeners or callbacks to the
82: * object events, or create your own events and trigger them at will.
83: *
84: * @param \Cake\Event\EventManager $eventManager the eventManager to set
85: * @return $this
86: */
87: public function setEventManager(EventManager $eventManager)
88: {
89: $this->_eventManager = $eventManager;
90:
91: return $this;
92: }
93:
94: /**
95: * Wrapper for creating and dispatching events.
96: *
97: * Returns a dispatched event.
98: *
99: * @param string $name Name of the event.
100: * @param array|null $data Any value you wish to be transported with this event to
101: * it can be read by listeners.
102: * @param object|null $subject The object that this event applies to
103: * ($this by default).
104: *
105: * @return \Cake\Event\Event
106: */
107: public function dispatchEvent($name, $data = null, $subject = null)
108: {
109: if ($subject === null) {
110: $subject = $this;
111: }
112:
113: $event = new $this->_eventClass($name, $subject, $data);
114: $this->getEventManager()->dispatch($event);
115:
116: return $event;
117: }
118: }
119: