2 namespace TYPO3\CMS\Extbase\SignalSlot;
57 if (!$this->isInitialized) {
58 $this->objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\ObjectManager::class);
59 $this->isInitialized =
true;
76 public function connect($signalClassName, $signalName, $slotClassNameOrObject, $slotMethodName =
'', $passSignalInformation =
true)
80 if (is_object($slotClassNameOrObject)) {
81 $object = $slotClassNameOrObject;
82 $method = $slotClassNameOrObject instanceof \Closure ?
'__invoke' : $slotMethodName;
84 if ($slotMethodName ===
'') {
85 throw new \InvalidArgumentException(
'The slot method name must not be empty (except for closures).', 1229531659);
87 $class = $slotClassNameOrObject;
88 $method = $slotMethodName;
94 'passSignalInformation' => $passSignalInformation ===
true
96 if (!is_array($this->slots[$signalClassName][$signalName]) || !in_array($slot, $this->slots[$signalClassName][$signalName])) {
97 $this->slots[$signalClassName][$signalName][] = $slot;
112 public function dispatch($signalClassName, $signalName, array $signalArguments = array())
115 if (!isset($this->slots[$signalClassName][$signalName])) {
116 return $signalArguments;
118 foreach ($this->slots[$signalClassName][$signalName] as $slotInformation) {
119 if (isset($slotInformation[
'object'])) {
120 $object = $slotInformation[
'object'];
122 if (!isset($this->objectManager)) {
123 throw new Exception\InvalidSlotException(sprintf(
'Cannot dispatch %s::%s to class %s. The object manager is not yet available in the Signal Slot Dispatcher and therefore it cannot dispatch classes.', $signalClassName, $signalName, $slotInformation[
'class']), 1298113624);
125 if (!$this->objectManager->isRegistered($slotInformation[
'class'])) {
128 $object = $this->objectManager->get($slotInformation[
'class']);
131 if (!method_exists($object, $slotInformation[
'method'])) {
132 throw new Exception\InvalidSlotException(
'The slot method ' . get_class($object) .
'->' . $slotInformation[
'method'] .
'() does not exist.', 1245673368);
135 $preparedSlotArguments = $signalArguments;
136 if ($slotInformation[
'passSignalInformation'] ===
true) {
137 $preparedSlotArguments[] = $signalClassName .
'::' . $signalName;
140 $slotReturn = call_user_func_array(array($object, $slotInformation[
'method']), $preparedSlotArguments);
143 if (!is_array($slotReturn)) {
145 . gettype($slotReturn) .
').', 1376683067);
146 }
elseif (count($slotReturn) !== count($signalArguments)) {
148 . count($slotReturn) .
') of arguments, than it received (' . count($signalArguments) .
').', 1376683066);
150 $signalArguments = $slotReturn;
155 return $signalArguments;
166 public function getSlots($signalClassName, $signalName)
168 return isset($this->slots[$signalClassName][$signalName]) ? $this->slots[$signalClassName][$signalName] : array();