Deprecation: #102586 - Deprecate simple string connection driver middleware registration

See forge#102586

Description

Using the simple 'identifier' => MyClass::class,' configuration schema to register Doctrine DBAL middlewares for connection is now deprecated in favour of using a sortable registration configuration similar to the PSR-15 middleware registration.

Impact

Connection driver middleware registration using a simple string will emit a corresponding message to the deprecation log since TYPO3 v13, but converting it on-the-fly to a valid array configuration.

Affected installations

TYPO3 instances using third-party extension providing custom Doctrine DBAL driver middlewares and having them registered for one or more connections will emit a deprecation message since TYPO3 v13 and either an exception with TYPO3 v14 or an PHP type error.

Migration

Simple driver middleware registration, for example

use MyVendor\MyExt\Doctrine\Driver\MyDriverMiddlewareClass;

$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['SecondDatabase']['driverMiddlewares']['driver-middleware-identifier']
    = MyDriverMiddlewareClass::class;
Copied!

needs to be converted to

use MyVendor\MyExt\Doctrine\Driver\MyDriverMiddlewareClass;

$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['SecondDatabase']['driverMiddlewares']['driver-middleware-identifier'] = [
  'target' => MyDriverMiddlewareClass::class,
  'after' => [
    'typo3/core/custom-platform-driver-middleware',
  ],
];
Copied!

Registration for driver middlewares for TYPO3 v12 and v13

Extension authors providing dual Core support with one extension version can use the Typo3Version class to provide the configuration suitable for the Core version and avoiding the deprecation notice:

use TYPO3\CMS\Core\Information\Typo3Version;
use MyVendor\MyExt\Doctrine\Driver\MyDriverMiddlewareClass;

$GLOBALS['TYPO3_CONF_VARS']['DB']['Connections']['SecondDatabase']['driverMiddlewares']['driver-middleware-identifier']
    = ((new Typo3Version)->getMajorVersion() < 13)
        ? MyDriverMiddlewareClass::class
        : [
          'target' => MyDriverMiddlewareClass::class,
          'after' => [
            'typo3/core/custom-platform-driver-middleware',
          ],
        ];
Copied!