TYPO3 v12 Upgrade - generelle Probleme
Beispiel BackendController auf Extbase-Basis:
https://github.com/svenpet90/instagram/blob/main/Classes/Controller/TokenGeneratorController.php
TYPO3_MODE gibt es nicht mehr, heißt jetzt einfach nur noch TYPO3.
Damit ist z.B. folgende Anweisung in ext_tables.php eher kontraproduktiv:
<?php
defined('TYPO3_MODE') || die();
Hat man das noch drin, kommt nur noch eine weiße Seite.
Im Backend in z.B. Mask Templates gehen Konstrukte wie z.B.
{data_item.tx_mask_contact -> f:format.html()}
nicht mehr, dafür aber:
{data_item.tx_mask_contact -> f:sanitize.html()}
Weitere Tipps:
typo3/cms-recordlist aus composer.json entfernen, Updates gehen sonst nur 12.4.10 🤮
https://www.clickstorm.de/blog/typo3-12-entwickler/#Neue_Pfade_mit_dem_Composer_Installer_Version_5
Umstellung auf neue Composer Struktur:
Um das eigentliche Upgrade auf TYPO3 v12 zu erleichtern, könnt ihr die Verzeichnisstruktur bereits in TYPO3 v11 umstellen. Diese Vorgehensweise habe ich gewählt und kann sie euch nur ans Herz legen.
Diese beiden Befehle sind notwendig:
composer req typo3/cms-composer-installers:^4.0@rc
composer install
4.0@rc ist die einzige verfügbare Version, die in TYPO3 v11 für die neue Struktur sorgt. Nach Ausführung werden TYPO3 und alle TYPO3-Extensions in vendor/ installiert und Symlinks für öffentliche Extension-Dateien in _public/assets/ erstellt.
Die alten Verzeichnisse im public-Verzeichnis (typo3/sysext/ und typo3conf/ext/) müsst ihr manuell entfernen.
Äußerst hilfreich ist der Blogbeitrag von Chris Müller, in dem er die notwendigen Migrationen in TypoScript, CSS, Fluid & Co. beschrieben hat: https://brot.krue.ml/migration-typo3-composer-cms-installers-version-4/
StandaloneView:
#old
$this->standaloneView->getRequest()->setControllerExtensionName($extensionname);
#new
$this->standaloneView->getRenderingContext()->setControllerName($extensionname);
Auch zu beachten: Bei f:translate muss in einem StandaloneView der komplette Pfad zum Identifier mit angegeben werden, so z.B.:
LLL:EXT:your_extension/Resources/Private/Language/yourFile.xlf:yourKey
Extbase Mapping:
in Configuration/Extbase/Persistence/Classes.php:
<?php
declare(strict_types=1);
return [
\Vendor\NewsPersonalized\Domain\Model\News::class => [
'tableName' => 'tx_news_domain_model_news'
]
];
Extbase-Objekt holen ohne Repository:
#In Controller
private function getCategoryByUid($uid)
{
/* @var $category \TYPO3\CMS\Extbase\Domain\Model\Category */
$category = $this->persistenceManager->getObjectByIdentifier($uid, Category::class);
return $category;
}
ext_icon: Ab TYPO3 v12 nur noch SVG unter Resources/Public/Icons/Extension.svg
.
Ckeditor im Backend:
How to use CKEditor in a TYPO3 backend module - A TechBlog by Torben Hansen
Ganz wichtig dazu, Backend-Templates werden in v12 in Configuration/page.tsconfig überschrieben:
# Pattern: templates."composer-name"."something-unique" = "overriding-extension-composer-name":"entry-path"
templates.derhansen/sf_event_mgt.30 = derhansen/sf_event_mgt_vendor:Resources/Private
f:format.html in Mails oder Backend durch f:transform.html ersetzen
Entfessle deine Kraft: Update auf TYPO3 v12.4 LTS - clickstorm
CategoryRepository existiert nicht mehr: Deprecation: #94654 - Generic Extbase domain classes — TYPO3 Core Changelog main documentation
Extbase repository, constraints können nicht mehr als array übergeben werden, so geht es:
if (count($constraints) > 0) {
$query->matching(
$query->logicalAnd(
...array_values([
$query->logicalAnd(...array_values($constraints)),
$query->logicalOr(...array_values($constraintsOr))
])
),
);
}
else {
$query->matching(
$query->logicalOr(...array_values($constraintsOr))
);
}
Wie kann ich in einem ViewHelper oder Controller den absoluten Pfad eines Asset-Directory bekommen?
use TYPO3\CMS\Core\Utility\GeneralUtility;
use TYPO3\CMS\Core\Utility\PathUtility;
$iconFolder = PathUtility::getAbsoluteWebPathgetFileAbsFileName('EXT:myext/Resources/Public/Images');
Ab v12 scheint für Autoloading eine Services.yaml Pflicht zu sein?
In extensionfolder/Configuration/Services.yaml:
services:
_defaults:
autowire: true
autoconfigure: true
public: false
VendorNamespace\ExtensionNamespace\:
resource: '../Classes/*'
switchableControllerActions aus Flexform haben keine Auswirkung mehr, Workaround oder auf verschiedene Plugins aufteilen:
TYPO3 12: switchableControllerActions wurden entfernt ° 99° Labor
Achtung: Über ExpressionsLanguage.php registrierte Conditions stören unter Umständen die Solr-Indizierung, CLI geht dann nicht, keine Connections vorhanden!!!
[BUG] Site exception in indexing task since update TYPO3 11.5.38 to 11.5.40 · Issue #4191 · TYPO3-Solr/ext-solr
Vorsicht bei Conditions auf locale, unter 12.4 nicht mehr lauffähig!
Lieber so etwas:
[siteLanguage("twoLetterIsoCode") === "en"]
Einige tiefergehende Probleme sind im Blog von Torben Hansen beschrieben:
Archive - A TechBlog by Torben Hansen
How to use CKEditor in a TYPO3 backend module - A TechBlog by Torben Hansen
Upgrade auf CKEditor 5 ist hier gut beschrieben: