Software developers will get excited when they hear what the new major TYPO3 release comes with.
First and foremost, PHP version 8.1 is a new minimum requirement to run TYPO3. This version has improved type safety, read-only properties, first-class callable syntax, fibers and intersection types, among other enhancements. TYPO3 v12 LTS also supports the newest and latest PHP release: version 8.2. This release includes read-only classes, additional stand-alone types, deprecated dynamic properties, and more. Most importantly: both PHP releases deliver better performance.
We upgraded third-party libraries and dependent packages to their latest versions if practical. A substantial update concerns the Database Abstraction Layer (DBAL). TYPO3 v12 LTS uses Doctrine DBAL version 3. This version of the DBAL went through major internal refactorings by separating Doctrine’s internal driver logic from PHP’s native PDO functionality.
The “glue” between the database layer and the FormEngine, which renders table rows in the TYPO3 backend, is the Table Configuration Array (TCA). TYPO3 v12 LTS features several new TCA types such as email, password, link, number, datetime, color, file, passwordGenerator and more.
Let’s dive deeper into the internals and look at the most significant change in the Extbase programming framework in TYPO3 v12 LTS. Experienced TYPO3 developers are likely familiar with “magic functions”. The characteristic of these functions is that their concrete implementation is determined at runtime. No black magic involved, just an intelligent part of the Extbase framework. As convenient as magic methods are, they come with some drawbacks. False warnings in modern IDEs or failing static code analysis are two examples.
We introduced a few new methods in TYPO3 v12 LTS, addressing these challenges. They provide the same functionality as magic methods and coexist with the old methods for the time being: findBy(), findOneBy() and count(). In addition, the new methods allow for multiple comparisons (called “constraints”), and their names follow the naming convention of the object-relational mapper Doctrine ORM.