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 dispatched in the
\Live class and allows
extensions to modify the
Composite
constraints collected in an array before execution.
This makes it possible to add additional constraints to the main query
constraints, combined with a logical OR. These constraints could
not previously be accessed by the existing event
Modify.
The event provides the following methods:
get: Returns the current array of query constraints (composite expressions).Constraints () add: Adds a single constraint.Constraint () add: Adds multiple new constraints.Constraints () get: Returns the table for which the query is executed (for example,Table Name () pagesortt_).content get: Returns the search demand.Search Demand ()
Hint
Constraints are intended to be added only. This ensures that security-related mandatory constraints added by Core or extensions cannot be negatively affected. For this reason, 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);
}
}
Core itself uses this event to allow searching for frontend URIs in the backend page tree.
Impact
A new PSR-14 event is now available for adding constraints to the live search
query. These constraints are combined with a logical OR.