1: <?php
2: /**
3: * CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
4: * Copyright (c) Cake Software Foundation, Inc. (http://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. (http://cakefoundation.org)
11: * @link http://cakephp.org CakePHP(tm) Project
12: * @since 3.0.10
13: * @license http://www.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\EventManager
28: */
29: protected $_eventManager = null;
30:
31: /**
32: * Default class name for new event objects.
33: *
34: * @var string
35: */
36: protected $_eventClass = '\Cake\Event\Event';
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: */
47: public function eventManager(EventManager $eventManager = null)
48: {
49: if ($eventManager !== null) {
50: $this->_eventManager = $eventManager;
51: } elseif (empty($this->_eventManager)) {
52: $this->_eventManager = new EventManager();
53: }
54:
55: return $this->_eventManager;
56: }
57:
58: /**
59: * Wrapper for creating and dispatching events.
60: *
61: * Returns a dispatched event.
62: *
63: * @param string $name Name of the event.
64: * @param array|null $data Any value you wish to be transported with this event to
65: * it can be read by listeners.
66: * @param object|null $subject The object that this event applies to
67: * ($this by default).
68: *
69: * @return \Cake\Event\Event
70: */
71: public function dispatchEvent($name, $data = null, $subject = null)
72: {
73: if ($subject === null) {
74: $subject = $this;
75: }
76:
77: $event = new $this->_eventClass($name, $subject, $data);
78: $this->eventManager()->dispatch($event);
79:
80: return $event;
81: }
82: }
83: