-
Notifications
You must be signed in to change notification settings - Fork 9.3k
/
InvokerDefault.php
106 lines (97 loc) · 2.91 KB
/
InvokerDefault.php
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
<?php
/**
* Default event invoker
*
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Event\Invoker;
use Magento\Framework\Event\Observer;
use Psr\Log\LoggerInterface;
use Magento\Framework\App\State;
/**
* Default Invoker.
*/
class InvokerDefault implements \Magento\Framework\Event\InvokerInterface
{
/**
* Observer model factory
*
* @var \Magento\Framework\Event\ObserverFactory
*/
protected $_observerFactory;
/**
* Application state
*
* @var State
*/
protected $_appState;
/**
* @var LoggerInterface
*/
private $logger;
/**
* @param \Magento\Framework\Event\ObserverFactory $observerFactory
* @param State $appState
* @param LoggerInterface $logger
*/
public function __construct(
\Magento\Framework\Event\ObserverFactory $observerFactory,
State $appState,
LoggerInterface $logger = null
) {
$this->_observerFactory = $observerFactory;
$this->_appState = $appState;
$this->logger = $logger ?: \Magento\Framework\App\ObjectManager::getInstance()
->get(LoggerInterface::class);
}
/**
* Dispatch event
*
* @param array $configuration
* @param Observer $observer
* @return void
*/
public function dispatch(array $configuration, Observer $observer)
{
/** Check whether event observer is disabled */
if (isset($configuration['disabled']) && true === $configuration['disabled']) {
return;
}
if (isset($configuration['shared']) && false === $configuration['shared']) {
$object = $this->_observerFactory->create($configuration['instance']);
} else {
$object = $this->_observerFactory->get($configuration['instance']);
}
$this->_callObserverMethod($object, $observer);
}
/**
* Execute Observer.
*
* @param \Magento\Framework\Event\ObserverInterface $object
* @param Observer $observer
* @return $this
* @throws \LogicException
*/
protected function _callObserverMethod($object, $observer)
{
if ($object instanceof \Magento\Framework\Event\ObserverInterface) {
$object->execute($observer);
} elseif ($this->_appState->getMode() == State::MODE_DEVELOPER) {
throw new \LogicException(
sprintf(
'Observer "%s" must implement interface "%s"',
get_class($object),
\Magento\Framework\Event\ObserverInterface::class
)
);
} else {
$this->logger->warning(sprintf(
'Observer "%s" must implement interface "%s"',
get_class($object),
\Magento\Framework\Event\ObserverInterface::class
));
}
return $this;
}
}