Signals

Signals are currently only used in the search controller. Every action emits a signal which can be used to change its variables assigned to the view.

Example

As an example, the action resultsAction of the Classes/Controller/SearchController is used.

$values = [
        'hasSearched' => $this->searchService->getHasSearched(),
        'additionalFilters' => $this->searchService->getAdditionalFilters(),
        'resultSet' => $searchResultSet,
        'pluginNamespace' => $this->typoScriptConfiguration->getSearchPluginNamespace()
];

$values = $this->emitActionSignal(__CLASS__, __FUNCTION__, [$values]);

To fulfill that signal, you can create a slot in your custom extension. All what it needs is an entry in your ext_localconf.php file:

/** @var \TYPO3\CMS\Extbase\SignalSlot\Dispatcher $signalSlotDispatcher */
$signalSlotDispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
$signalSlotDispatcher->connect(
    \ApacheSolrForTypo3\Solr\Controller\SearchController::class,
    'resultsAction',
    \YourVendor\yourextkey\Slot\SearchControllerSlot::class, // fully your choice
    'resultsActionSlot', // fully your choice
);

An example call look like this:

/**
 * @param array $values
 */
public function resultsActionSlot($values) {
        $values['foo'] = 'bar'

        return [$values];
}

Notice: The values array needs to be returned as an single element of an array, because a slot method has to return the same number of arguments like it received.