Feature: #105827 - New PSR-14 ModifyConstraintsForLiveSearchEvent
See forge#105827, forge#105833, forge#93494
Description
A new PSR-14 event
\TYPO3\
has been added to TYPO3 Core. This event is fired in the
\TYPO3\ class
and allows extensions to modify the
Composite constraints
gathered in an array, before execution. This allows to add or remove additional constraints to the main query
constraints that are combined in an logical OR conjunction, and could not be accessed
with the existing event
\TYPO3\.
The event features the following methods:
get: Returns the current array of query constraints (composite expression).Constraints () add: Adds a single constraint.Constraint () add: Adds multiple new constraints in one go.Constraints () get: Returns the table, for which the query will be executed (e.g. "pages" or "tt_content").Table Name () get: Returns the search demand that is getting searched forSearch Demand ()
Hint
Note that constraints are only intended to be added to the event, to not negatively impact security-related mandatory constraints added by Core or extensions. So there is no way to remove a constraint after it has been added.
Example
The corresponding event listener class:
<?php
namespace Vendor\MyPackage\Backend\EventListener;
use TYPO3\CMS\Backend\Search\Event\ModifyConstraintsForLiveSearchEvent;
use TYPO3\CMS\Core\Attribute\AsEventListener;
use TYPO3\CMS\Core\Database\ConnectionPool;
final readonly class PageRecordProviderEnhancedSearch
{
public function __construct(private ConnectionPool $connectionPool) {}
#[AsEventListener('my-package/livesearch-enhanced')]
public function __invoke(ModifyConstraintsForLiveSearchEvent $event): void
{
if ($event->getTableName() !== 'pages') {
return;
}
$queryBuilder = $this->connectionPool->getQueryBuilderForTable('pages');
// Add a constraint so that pages marked with "show_in_all_results=1"
// will always be shown.
$constraints[] = $queryBuilder->expr()->eq(
'show_in_all_results',
1,
);
$event->addConstraints(...$constraints);
}
}
The Core itself makes uses of this event to allow searching for frontend URIs inside the backend tree.
Impact
It is now possible to use a new PSR-14 event for adding constraints to the Live Search query, which are OR-combined.