TYPO3 v15 dev-main snapshot ()
This commit is contained in:
+62
@@ -0,0 +1,62 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-79387:
|
||||
|
||||
==================================================================
|
||||
Feature: #79387 - Add signal to exclude tables from ReferenceIndex
|
||||
==================================================================
|
||||
|
||||
See :issue:`79387`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
A new signal :php:`shouldExcludeTableFromReferenceIndex` is emitted in :php:`TYPO3\CMS\Core\Database\ReferenceIndex` which allows
|
||||
extensions to define tables which should be excluded from ReferenceIndex.
|
||||
|
||||
Register the class which excludes tables in `ext_localconf.php`:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
$dispatcher = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\SignalSlot\Dispatcher::class);
|
||||
$dispatcher->connect(
|
||||
\TYPO3\CMS\Core\Database\ReferenceIndex::class,
|
||||
'shouldExcludeTableFromReferenceIndex',
|
||||
\MyVendor\MyExtension\Slots\ReferenceIndexSlot::class,
|
||||
'shouldExcludeTableFromReferenceIndex'
|
||||
);
|
||||
|
||||
Your class could look like this:
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
namespace MyVendor\MyExtension\Slot;
|
||||
|
||||
class ReferenceIndexSlot {
|
||||
|
||||
/**
|
||||
* Exclude tables from ReferenceIndex which cannot contain a reference
|
||||
*
|
||||
* @param string $tableName Name of the table
|
||||
* @param bool &$excludeTable Reference to a boolean whether to exclude the table from ReferenceIndex or not
|
||||
*/
|
||||
public function shouldExcludeTableFromReferenceIndex($tableName, &$excludeTable) {
|
||||
if ($tableName === 'tx_myextension_mytable') {
|
||||
$excludeTable = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
This signal allows extensions to speed up the process of maintaining the ReferenceIndex. If an extension has tables in which by
|
||||
definition none of its columns can contain any relations to other records these can be excluded from the ReferenceIndex.
|
||||
|
||||
Only exclude tables from ReferenceIndex which do not contain any relations and never did since existing references won't be
|
||||
deleted if it is excluded! There is no need to add tables without a definition in :php:`$GLOBALS['TCA]` since ReferenceIndex
|
||||
only handles those.
|
||||
|
||||
.. index:: Database, PHP-API, Backend
|
||||
Reference in New Issue
Block a user