TYPO3 Release v13 - Deprecations

Inhaltsverzeichnis

Dieser Artikel besteht aus mehreren Unterseiten:

Einführung
Neue Funktionen
Breaking Changes
Deprecations

 

Die Gretchenfrage: "Wie hältst Du's mit den Deprecations?"

Inhalt dieser Seite

Fluid
TCA
FormEngine
DataHandler
Extbase
TypoScript
Extension-Infrastruktur
JavaScript
Systemkonfiguration
Doctrine / DBAL
API
Datei-System / Routing
EXT:indexed_search

Im Gegensatz zu Breaking Changes sind Deprecations "Willensbekundungen" zu einem kommenden Breaking Change. Deprecations können in der Version, wo sie eingeführt werden (dies geht bis zur LTS-Veröffentlichung!), noch ignoriert werden. Die Warnhinweise können optional in einem Logfile angesammelt werden, das erfahrungsgemäß aber sehr groß wird und im Produktivbetrieb unbedingt deaktiviert sein sollte. Das heißt: Eine Deprecation tut erst mal nicht weh und man kann sie "wegblinzeln".

Die Fragen, die man sich bei jeder Deprecation stellen sollte: 
 

  • Wie aufwändig ist es, eine Deprecation sofort anzugehen und eine Anpassung vorzunehmen, bevor man vor einem Breaking Change steht? Bei kleinen, unaufwändigen Dingen sollte man bestenfalls sofort handeln und es bei einem Update mit einplanen. 
  • Bei aufwändigen Deprecations: Erhält man das Budget für eine Umsetzung in einem Projekt bereits jetzt, oder muss man diesen Aufwand in der Zukunft zum "Breaking Change" budgetieren?
  • Ist es realisierbar, bereits eine "Vorwärtskompatibilität" einzubauen (z.B. wenn man Extensions entwickelt, die für mehrere TYPO3-Hauptversionen funktionieren müssen), so dass man bereits auf den Breaking Change vorbereitet ist?
  • Ist die Deprecation noch so "neu", dass man noch abwarten kann, ob noch Migrationswizards oder TYPO3-Rector-Rules entwickelt werden? Oder kann man hier sogar helfen?

Diesen Fragen stellen wir uns auch bei jeder Änderung im Projekt-Alltag. Manche Deprecations kann man aufgrund von Deadlines oder der Komplexität einfach nicht realistisch sofort angehen und muss die Anpassung davon auf die nächste Hauptversion verschieben. Dies sollte man dann rechtzeitig in die Budgetplanung aufnehmen, denn am Ende ist alles ein Spiel auf Zeit und Geld. Ein Investitionsstau im laufenden Betrieb kann sich später zu kostspieligen "großen" Updates hochschaukeln, oder gar notwendige Sicherheitsupdates blockieren.

Die folgenden Deprecations sind sortiert nach "Größe des Anpassungsaufwands". Glücklicherweise sind viele Deprecations auch "nur" das Abschneiden von alten Zöpfen, die man in modernen Projekten sowieso nicht mehr verwendet.

Die wichtigsten ⚠️Deprecations sind:
 

  • Entfall von $GLOBALS['TSFE']
  • Entfall von "list_type/sub_type" zugunsten von "CType"
  • Fluid StandaloneView entfällt
  • Fluid ViewHelper Migrationen (tagAttributes, renderStatic, getRequest)
  • PageRepository->enableFields
  • ExtensionManagementUtility::addPItoST43
  • Automatische Registrierung von Page/User TSConfig
  • Registrierung von Extension-Icons

Legende:

⚠️- Aufpassen/Merken!
🐣 - Sehr einfaches suchen+ersetzen
✍️ - Relative einfaches ersetzen, aber etwas mehr Transferarbeit nötig
🧠 - Aufwändig
🕳️ - Entfällt ohne Ersatz

Fluid

  • ⚠️ ✍️ Die Methode renderStatic in eigenen ViewHelpern soll durch die reguläre "render()" Methode ersetzt werden. Bisher vorhandene Traits sollen entfernt werden. Hierzu gibt es detaillierte Migrationsanweisungen und auch eine Rector-Regel. - [Changelog]
  • ⚠️ ✍️ Die Nutzung vom RenderingContext->getRequest() (primär in ViewHelpern) soll zugunsten vom Auslesen von Request-Attributen (ServerRequestInterface) nicht mehr verwendet werden. Die beschriebene Migration ist wenig aufwändig. - [Changelog]
  • ⚠️ 🧠 Die Fluid StandaloneViews inklusive der AbstractTemplateView und TemplateView sollen zugunsten der neuen ViewFactory / ViewFactoryInterface nicht mehr genutzt werden. Die Migration hiervon sollte weniger aufwändig ausfallen als man befürchten könnte, und Dinge dank Depency Injection relativ komfortabel machen. - [Changelog1, Changelog2]
  • ⚠️ 🐣 Die Fluid Variablen true, false und null sind nun "echte" Werte und dürfen nicht mehr als eigene Variablennamen verwendet werden - [Changelog]
  • ⚠️ ✍️ Die Methoden AbstractTagBasedViewHelper->registerUniversalTagAttributes() und AbstractTagBasedViewHelper->registerTagAttribute() sollen zugunsten von automatisch registrierten $this->additionalArguments nicht mehr genutzt werden. - [Changelog]
  • ✍️ \TYPO3\CMS\Fluid\View\TemplatePaths->fillDefaultsByPackageName() soll zugunsten der konkreten setTemplateRootPaths / setLayoutRootPaths / setPartialRootPaths (oder der ViewFactory) nicht mehr genutzt werden - [Changelog]
  • ✍️ AbstractViewHelper->overrideArgument() soll zugunsten von AbstractViewHelper->registerArgument() nicht mehr verwendet werden - [Changelog]
  • ⚠️ ✍️ Aufrufe des ViewInterfaces in Extbase Controllern sollten einen Instanzcheck durchführen bevor Methoden wie get/setRenderingContext und renderSection / renderPartial aufgerufen werden (instanceof FluidViewAdapter), da diese nicht mehr zum zentralen ViewInterface gehören - [Changelog]

TCA

  • ⚠️ 🧠 Das "list_type" Feld zur Definition von Content-Elementen, sowie "subtypes_addlist/subtypes_excludelist" entfällt zugunsten einer reinen "CType"-Definition (Nutzung von Migrations-Wizards möglich für Teile hiervon) - [Changelog1, Changelog2]
  • ✍️ BackendUtility::getTcaFieldConfiguration soll zugunsten von direktem TCA Zugriff (oder TCA Schema Factory) vermieden werden - [Changelog]
  • 🐣 Das Feld MM_hasUidField soll nicht mehr genutzt werden, SQL-Spalten werden automatisch erzeugt - [Changelog]

FormEngine

  • ✍️ Die kommaseparierte URL-Parameter Syntax von 'columnsOnly' zum gezielten Bearbeiten von Datensätzen im Backend soll zugunsten einer Array-Syntax nicht mehr genutzt werden - [Changelog]

DataHandler

  • 🐣 Die Properties \TYPO3\CMS\Core\DataHandling\DataHandler->checkStoredRecords und \TYPO3\CMS\Core\DataHandling\DataHandler->checkStoredRecords_loose werden nicht mehr ausgewertet - [Changelog]

Extbase

  • ⚠️ ✍️ Die Validator-Option "errorMessage" vom RegularExpressionValidator soll zugunsten der pauschalen Validator-Fehlermeldungsanpassung nicht mehr genutzt werden - [Changelog]
  • 🐣 Die relativ unbekannte Kurzsyntax von Validatoren (TYPO3.CMS.Extbase:NotEmpty) soll zugunsten von FQCN Syntax (TYPO3\CMS\Extbase\Validation\Validator\NotEmptyValidator) nicht mehr genutzt werden - [Changelog]

TypoScript

  • ⚠️ 🧠 TypoScriptFrontendController / $GLOBALS['TSFE'] soll zugunsten von request-Aspekten nicht mehr genutzt werden - [Changelog]
  • ✍️ Aufrufe von TypoScriptFrontendController->addCacheTags() und TypoScriptFrontendController->getPageCacheTags() sollen zugunsten von $request->getAttribute('frontend.cache.collector') nicht mehr genutzt werden - [Changelog]
  • ✍️ options.pageTree.backgroundColor soll zugunsten vom Page Tree Labelling Feature options.pageTree.label.XXX nicht mehr genutzt werden - [Changelog]
  • ⚠️ ✍️ Die Syntax "INCLUDE_TYPOSCRIPT" soll zugunsten von "@import" nicht mehr genutzt werden. Hierbei gibt es jedoch fallweise kleinere Besonderheiten/Fallstricke. - [Changelog]

Extension-Infrastruktur

  • ⚠️ 🐣 Die Methoden ExtensionManagementUtility::addPageTSConfig() und ExtensionManagementUtility::addUserTSConfig() sollen nicht mehr genutzt werden, ersetzt durch automatisches Laden von page.tsconfig und user.tsconfig. - [Changelog1, Changelog2]
  • ⚠️ 🐣 ExtensionManagementUtility::getExtensionIcon() soll zugunsten von \TYPO3\CMS\Core\Package\Package->getPackageIcon nicht mehr verwendet werden - [Changelog]
  • ⚠️ ✍️ Die Registrierung eigener Icons mittels ext_localconf.php und \TYPO3\CMS\Core\Imaging\IconRegistry soll zugunsten der Datei Configuration/Icons.php nicht mehr genutzt werden. - [Changelog]
  • ⚠️ ✍️Das betagte ExtensionManagementUtility::addPItoST43 soll zugunsten von einer angepassten Nutzung von \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::addTypoScript() nicht mehr verwendet werden. - [Changelog]

JavaScript

  • 🧠 Eigene Backend-Wizards via @typo3/backend/wizard.js sollen zugunsten vom umfangreicheren @typo3/backend/multi-step-wizard.js Modul nicht mehr verwendet werden - [Changelog]
  • ✍️ Das Backend-Modul @typo3/backend/document-save-actions.js soll zugunsten von @typo3/backend/form/submit-interceptor.js genutzt werden und muss lediglich Anpassungen im Konstruktor vornehmen - [Changelog]
  • ✍️ An die Methoden validateField und markFieldAsChanged sollen keine jQuery Objekte mehr gesendet werden - [Changelog]
  • 🐣 Das Modul @typo3/backend/page-tree/page-tree-element soll zugunsten von @typo3/backend/tree/page-tree-element nicht mehr genutzt werden - [Changelog]
  • 🐣 Der alte JS Key @typo3/t3editor/ soll zugunsten von @typo3/backend/code-editor/ nicht mehr verwendet werden. Der TCA renderType=t3editor soll zugunsten von renderType=codeEditor nicht mehr genutzt werden. - [Changelog]
  • ✍️ Die alte Methode Utility.updateQueryStringParameter() soll zugunsten von nativem JavaScript `URLSearchParams` nicht mehr verwendet werden - [Changelog]

Systemkonfiguration

  • ⚠️ 🐣 $GLOBALS['TYPO3_CONF_VARS']['FE']['addRootLineFields'] soll nicht mehr verwendet werden, da nun alle Felder immer vollständig ausgewertet werden - [Changelog]

Doctrine / DBAL

  • 🐣 Die einfache Registrierung von driverMiddlewares wird zugunsten von einer before/after Deklaration nicht mehr möglich sein. - [Changelog]
  • 🐣 Die TYPO3_CONF_VARS Option 'tableoptions' und 'collate' in den Connection-Parametern wird umbenannt in defaultTableOptions und collations. - [Changelog]
  • 🐣 DBAL 4.2.0 liefert ein neues ENUM Handling, was mit TYPO3 vor 13.4 nicht kompatibel ist. Verwendung der TYPO3-spezifischen ENUM-Implementation soll auf die DBAL-Implementation umgestellt werden. - [Changelog]

API

  • ✍️ \TYPO3\CMS\Core\Domain\Repository\PageRepository->enableFields() soll zugunsten von \TYPO3\CMS\Core\Domain\Repository\PageRepository->getDefaultConstraints() nicht mehr verwendet werden - [Changelog]
  • 🐣 Das PHP-Attribut #[Controller] soll zugunsten von #[AsController] nicht mehr genutzt werden - [Changelog]
  • 🐣 Die Methode BackendUserAuthentication::returnWebmounts() soll zugunsten von BackendUserAuthentication::getWebmounts() nicht mehr verwendet werden - [Changelog]
  • 🕳️ Die Klasse \TYPO3\CMS\Core\DataHandling\SlugEnricher soll nicht mehr verwendet werden - [Changelog]
  • 🕳️ Die Klasse BackendUtility::thumbCode() soll nicht mehr verwendet werden. - [Changelog]
  • 🐣 Die Methode MathUtility::convertToPositiveInteger() soll nicht mehr verwendet werden (stattdessen native PHP Methoden)
  • ✍️ Die Klasse TYPO3\CMS\Backend\View\BackendLayout\DataProviderContext wurde in ein Data Objekt umgewandelt, alle get/set Methoden sollen zugunsten von Public Constructor Property Promotion (PCPP) nun im Konstruktur übertragen werden. Dies ist relevant für eigene implementierte BackendLayoutDataProvider. - [Changelog]
  • ✍️ DiffUtility->makeDiffDisplay() soll zugunsten von DiffUtility->diff() nicht mehr verwendet werden; die Property $stripTags soll nicht mehr genutzt werden. - [Changelog]
  • ✍️Bei der eigenen Nutzung vom LoginProviderInterface soll man die render() Methode zugunsten von `modifyView` nicht mehr nutzen. - [Changelog]
  • ✍️Die folgenden Klassen-Aliase sollen nicht mehr genutzt werden - [Changelog]
    • \TYPO3\CMS\Install\Updates\AbstractDownloadExtensionUpdate -> \TYPO3\CMS\Extensionmanager\Updates\AbstractDownloadExtensionUpdate
    • \TYPO3\CMS\Install\Updates\ExtensionModel -> \TYPO3\CMS\Extensionmanager\Updates\ExtensionModel
  • ✍️Die folgenden Hooks sollen nicht mehr genutzt werden: - [Changelog]
    • ['TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList']['customizeCsvHeader']
    • ['TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList']['customizeCsvRow']
  • 🧠Die folgenden nicht mehr genutzten Interface werden entfernt: - [Changelog1, Changelog2, Changelog3, Changelog4, Changelog5, Changelog6]
    • ContentObjectOneSourceCollectionHookInterface
    • ContentObjectPostInitHookInterface
    • ContentObjectGetDataHookInterface
    • ContentObjectStdWrapHookInterface
    • ContentObjectGetImageResourceHookInterface 
    • PageRepositoryInitHookInterface
  • ✍️ \TYPO3\CMS\Extbase\Security\Cryptography\HashService und \TYPO3\CMS\Core\Utility\GeneralUtility::hmac() soll zugunsten von \TYPO3\CMS\Core\Crypto\HashService nicht mehr genutzt werden - [Changelog1 Changelog2]

🐣 ENUMs
 

  • Die Klasse \TYPO3\CMS\Core\Type\Icon\IconState soll zugunsten von \TYPO3\CMS\Core\Imaging\IconState nicht mehr genutzt werden - [Changelog]
  • Die Klasse \TYPO3\CMS\Core\Resource\DuplicationBehavior soll zugunsten von \TYPO3\CMS\Core\Resource\Enum\DuplicationBehavior nicht mehr verwendet werden - [Changelog]
  • Die Klasse \TYPO3\CMS\Core\Type\Enumeration soll zugunsten von nativen ENUMs nicht mehr verwendet werden - [Changelog]
  • Die Klasse \TYPO3\CMS\Backend\Toolbar\Enumeration\InformationStatus soll anstelle von Konstanten die direkten ENUMs verwenden - [Changelog]
  • Die Klasse \TYPO3\CMS\Core\Versioning\VersionState soll zugunsten von direkten ENUMs nicht mehr verwendet werden - [Changelog]
  • Die \TYPO3\CMS\Core\Imaging\Icon Klassenkonstanten sollen zugunsten von \TYPO3\CMS\Core\Imaging\Icon und \TYPO3\CMS\Core\Imaging\IconFactory nicht mehr verwendet werden - [Changelog]
  • Die AbstractFile::FILETYPE_* Konstanten sollen zugunsten von den ENUMs in \TYPO3\CMS\Core\Resource\FileType nicht mehr verwendet werden - [Changelog]

Datei-System / Routing

  • ✍️ Der standardmäßige Entrypoint /typo3/index.php ist zugunsten einer konfigurierbaren URL nicht mehr vorgesehen. Sämtliches Routing erfolgt über die /index.php (abseits von /typo3/install.php bei der Installation). - [Changelog]

EXT:indexed_search

  • ✍️ Eigene Content Parser sollen kein Array sondern eine Instanz von TYPO3\CMS\IndexedSearch\Dto\IndexingDataAsString zurückliefern - [Changelog]

Über Faktor E

Unsere Agentur, die Faktor E GmbH, ist an der TYPO3-Fortentwicklung involviert und mit Garvin Hicking beschäftigen wir einen Mitarbeiter, der im Core-Team als Framework-Merger aktiv mitarbeitet und uns einen zeitnahen Einblick in das Entwicklungsgeschehen gibt. Unser gesamtes erfahrenes Team mit mehreren zertifizierten Personen (Consultant/Integrator/ Developer/Editor) führt für Sie gerne TYPO3-Updates oder neue Projekte durch: Kontaktieren Sie uns!