TYPO3 Tipps und Tricks: Extbase Objekte Erweitern / Table mapping in TYPO3 10

In TYPO3 kann man Extbase Objekte aus dem Core oder aus anderen TYPO3-Extensions mit neuen/eigenen Feldern erweitern. Bis TYPO3 9 hat man das Mapping auf "eigene" Models über TypoScript erledigt, in TYPO3 Version 10 hat sich das geändert. In diesem Beitrag zeigen wir anhand der FileReference aus dem TYPO3-Core wie man diese auf ein eigenes Model mapped.

Um ein bestehendes Extbase-Objekt zu erweitern, muss man eine Datei EXT:va_extension/Configuration/Extbase/Persistence/Classes.php mit folgendem Inhalt anlegen:

<?phpdeclare(strict_types = 1);return [    //Klasse des Models    \Varioous\VaExtension\Domain\Model\FileReference::class => [        //Name der Tabelle auf welches das Model gemapped wird        'tableName' => 'sys_file_reference',        //Optional kann man noch Felder mappen        'properties' => [            'originalFileIdentifier' => [                'fieldName' => 'uid_local'            ]        ]    ],];

Abschließend muss das mapping noch in der ext_localconf.php Datei noch definiert werden (per XCLass):

/************************************************************************ * XCLASS ************************************************************************/$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects'][TYPO3\CMS\Extbase\Domain\Model\FileReference::class] = [    'className' => \Varioous\VaExtension\Domain\Model\FileReference::class,];// Register extended domain class\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Extbase\Object\Container\Container::class)    ->registerImplementation(        TYPO3\CMS\Extbase\Domain\Model\FileReference::class,        \Varioous\VaExtension\Domain\Model\FileReference::class    );

Nun kann man bereits das Model und das Repository erweitern (einfach von der ursprünglichen Klasse erben):

class FileReference extends \TYPO3\CMS\Extbase\Domain\Model\FileReference {   //Model mit eigenen Feldern erweitern}class PageRepository extends \TYPO3\CMS\Core\Domain\Repository\PageRepository {  //Repository erweitern mit eigenen Funktionen  //Am Beispiel PageRepository, da es kein FileReferenceRepository gibt}