Implementationen für eigene TypolinkBuilder müssen neues Interface nutzen.
Zielgruppe: Entwicklung
Ein neues TypolinkBuilderInterface ersetzt den alten AbstractTypolinkBuilder, und ermöglicht nun komfortable Dependency Injection und direkten Zugriff auf den Request-Kontext. Eine neue Methode build() ersetzt das alte buildLink(). Eigene TypolinkBuilder müssen dieses neue Interface implementieren oder für die Nutzung des alten Abstracts einige Signaturen anpassen.
WissenswertEntfernung von Environment::getComposerRootPath().
Zielgruppe: Entwicklung
Anstelle dieser Method soll nun Environment::getProjectPath() genutzt werden, da durch Vereinheitlichungen im Composer-Installer dieser nicht mehr abweicht im Inhalt des getComposerRootPath().
Sehr wichtigDer Einstiegspunkt typo3/index.php ist nicht mehr verfügbar.
Zielgruppe: Administration
Im Zuge von Konfigurierbarkeit des Backend ist die Erstellung dieser Datei nicht mehr nötig, und wird durch virtuelles Routing (Apache/Nginx-Konfiguration) hergestellt.
Sehr wichtigDer Einstiegspunkt "/typo3/install.php" wurde entfernt.
Zielgruppe: Administration
Das Install-Tool kann nun über den regulären Haupt-Einstiegspunkt "/index.php" geroutet werden. Notfall-Zugriff kann über eine URL-Variable erfolgen.
Entfernung des SortableCollectionInterface.
Zielgruppe: Entwicklung
Dieses Interface war nie vollständig implementiert und war zur Verwaltung von Array-Kollektionen vorgesehen. Eigene Implementationen sollten ein eigenes Interface nutzen oder die PHP-Standardmethoden wie usort/uasort nutzen.
Der TYPO3\CMS\Core\Charset\CharsetConverter wurde vereinfacht und unterstützt nur noch UTF-8.
Zielgruppe: Administration
Da mittlerweile Webseiten alle im UTF-8 Zeichenraum betrieben werden ist eine Nutzung anderer Zeichensätze nicht mehr direkt notwendig und im Core eingesetzt. Wer diese Funktionen genutzt hat, kann andere Hilfsbibliotheken hierfür einbinden (oder den alten Code reaktivieren im eigenen Scope).
Der TYPO3\CMS\Core\Resource\Security\FileNameValidator nutzt nun ein Core-verwaltetes Dateinamensmuster und kann nicht mehr via Konstrukturmethode angepasst werden.
Zielgruppe: Integration
Hierfür wird nun nur noch $GLOBALS['TYPO3_CONF_VARS']['BE']['fileDenyPattern'] ausgewertet.
Nutzung der Record API in DatabaseRecordList.
Zielgruppe: Entwicklung
Der zentrale Controller für die Backend-Verwaltung im Listenmodul (Datensätze) nutzt nun die Record API. Diese ermöglicht ein Auslesen der TCA-Werte anhand von vollständig gebauten Objekten, in denen Relationen und weitere Inhalte bereits aufgelöst wurden. Eigener Code der den DatabaseRecordList-Controller anspricht oder XCLASS-t muss bei den Signaturen oder Aufrufen nun Anpassungen vornehmen.
Sehr wichtigNutzung der Record API im Seitenmodul.
Zielgruppe: Entwicklung
Die Record-API wird intern nun auch zur Auswertung von Datensätzen im Seitenmodul genutzt. Etwaige eigene Implementationen die den StandardContentPreviewRenderer nutzen, oder auf GridColumnItem zugreifen, oder den PageContentPreviewRenderingEvent nutzen, oder das Vorschaurendering über TypoScript via mod.web_layout.tt_content.preview.[recordType] beeinflussen müssen die Record API ebenfalls berücksichtigen.
Beim Einsatz von Content-Blocks ist dies innerhalb der Extension schon bereits früher genutzt worden.
Die Option "zufällige Unterseite" beim Seitentypen "Shortcut" wurde entfernt.
Zielgruppe: Redaktion
Klassen die ModuleInterface implementieren (eher selten, meist wird nur die Module Klasse direkt genutzt, die dieses Interface implementiert) müssen die Methode hasSubmoduleOverview implementieren.
Zielgruppe: Entwicklung
WissenswertAufgrund der Einführung der neuen System-Resource API wird das Datei-Resolving angepasst. .
Zielgruppe: Integration
Die Nutzung des Cache-Bustings nun immer standardmäßig aktiv. Zugriff auf Assets auf FAL-Storages ausser "fileadmin" via direkter URL-Eingabe (statt "FAL-Index"-Syntax) ist nicht mehr möglich. Ausserdem liefert die TypoScript "getData" Methode nun eine absolute anstelle einer relativen URI für aufgelöste Pfade.
Eine interne Middleware in TYPO3, die den gesamten Seiteninhalt auf das Vorkommen von relativen Dateireferenzen durchsucht hat und bei absRefPrefix-Nutzung in absolute Links verwandelt hat ist nun deaktiviert. Bei Nutzung der korrekten APIs, unter anderem der neuen System Resource API und den ViewHelpern und LinkBuildern/UriBuildern/FAL-API-Aufrufen, wird dies keinen Einfluss haben und verbessert die Performance. Die Option additionalAbsRefPrefixDirectories ist hiermit nun auch hinfällig.
WissenswertNutzung des "external" Attributes für Asset-Rendering (z.b. "includeCSS") ist nicht mehr unterstützt und wird durch die neue "URI:" Syntax abgelöst.
Zielgruppe: Integration
Sehr wichtigButton Template Komponenten / Button API.
Zielgruppe: Entwicklung
Durch die Einfügung von Typ-Deklarationen müssen genutzte Methoden der Button API diese Typen einhalten. Eigene Implementationen des ButtonInterface oder DropDownItemInterface müssen entsprechende Deklarationen enthalten. Alle Icon-Deklarationen der Button APIs sind nun nullable. Parameter der MenuItem::isValid und Menu::isValid Methoden dürfen nicht mehr genutzt werden. Eigene Ableitungen der AbstractButton Klasse müssen die entsprechenden Typdeklarationen beachten.
Die neue Button-API hat Änderungen erfordert, die sich in den PSR-14 Events ModifyRecordListRecordActionsEvent und ProcessFileListActionsEvent auswirkt, wie auch DatabaseRecordList::makeControl(). EventListener dieser Events müssen Buttons nun auch via Button API erzeugen, und nicht mehr rohes HTML durchreichen.
WissenswertEntfernung der "OutputCompression"-Option für Frontend und Backend.
Zielgruppe: Administration
Die gzip-Kompression und auch die Option zum "CompressionLevel" wurde entfernt; dies wird bessern von Webservern selbst durchgeführt statt im PHP-Scope. Zugehörige Middlewares wurden entfernt, etwaige eigenen Positionierungen von Middlewares mit diesen Identifizieren müssen geprüft werden.
Bei Nutzung der OutputCompression wurden auch CSS-Dateien "minifiziert", was nun entfällt.
Zielgruppe: Administration
Sehr wichtigEntfernung der Frontend-Asset-Konkatenierung und Kompression.
Zielgruppe: Administration
Assets sollten besser über Build-Routinen oder Webserver-Seitige Funktionen komprimiert werden, als mit der leider fehleranfälligen und problematischen PHP-Implementation.
Sehr wichtigZusammenführung von FlexFormService und FlexFormTools.
Zielgruppe: Entwicklung
Die Funktionalität der beiden Klassen wird nun in FlexFormTools zusammengeführt. Etwaige eigene Nutzung der FlexFormService-Klasse muss angepasst werden.
WissenswertEntfernung "TypoScriptFrontendController" (TSFE).
Zielgruppe: Entwicklung
Durch mehrere Vor-Patches bereits angedeutet (und dort kommentiert, wie man damit umzugehen hat): TypoScriptFrontendController (TSFE) existiert nun nicht mehr als Objekt. Die letzten Reste wurden in den zentralen HTTP RequestHandler überführt.
Sehr wichtigEntfernung von $_GET/$_POST/$_REQUEST Fallbacks.
Zielgruppe: Entwicklung
Der Fallback-Layer, der die Synchronisierung der superglobalen GET/POST/REQUEST-Arrays durchgeführt hat, wurde abgeschaltet. Ein Zugriff auf Request-Variablen und Attribute darf nur noch regular per PSR HTTP Middleware geschen (dem $request Objekt). Mittelfristig wird auch die globale $GLOBALS['TYPO3_REQUEST'] Variable abgeschaltet werden. Middlewares die auf diese Variable nach typo3/cms-frontend/prepare-tsfe-rendering zugreifen, können sich auf diesen Variableninhalt NICHT mehr verlassen (und sollten besser die $request Variable entsprechend durchschleifen/weiterreichen).
Entfernung der MailMessage->send Methode (Mailversand über MailerInterface->send() weiterhin möglich).
Zielgruppe: Entwicklung
Die Registrierung von Benutzer-Backend-Avatar-Providern erfolgt nun mittels Auto-Configuration (via Interface und Attribut #[AsAvatarProvider]) anstelle von Registrierung in TYPO3_CONF_VARS.
Zielgruppe: Entwicklung
WissenswertDie TYPO3-Implementation des UriInterface für URI-Normalisierungen enthielt einen Fehler bei der Verarbeitung von Pfaden ohne führenden "/" und ohne Protokollangaben. In diesen Fällen hat TYPO3 selbständig einen "/" vorangestellt. Dieser Fehler wurde behoben, kann aber Auswirkungen auf eigene Implementationen haben, falls das alte Verhalten gewünscht war und die auf den führenden Slash angewiesen waren.
Zielgruppe: Integration
Sehr wichtigDie Datei "composer.json" ist nun für Extensions zwingend erforderlich; "ext_emconf.php" reicht nun auch für den Classic mode nicht mehr aus. Zudem wird nun der Extension-Name aus dem ersten Teil der composer.json "description" bezogen.
Zielgruppe: Entwicklung
