Deprecation: #87550 - Use controller classes when registering plugins/modules

See Issue #87550

Description

Configuring plugins and modules via the following methods has changed in two important ways.

  • \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
  • \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule

Both methods expect you to provide the argument $extensionName and $controllerActions. configurePlugin also allows the argument $nonCacheableControllerActions.

The first important change targets the $extensionName argument. During the switch from underscore class names :php`Tx_Extbase_Foo_Bar` to actual namespaced classes TYPO3\CMS\Extbase\Foo\Bar, a vendor TYPO3\CMS has been introduced which had to be respected during the configuration of plugins. To make that possible the argument $extensionName has been prepended with the vendor name, concatenated with dots.

::

<?php

TYPO3CMSExtbaseUtilityExtensionUtility::configurePlugin(
'TYPO3.CMS.Form', // $extensionName 'Formframework', ['FormFrontend' => 'render, perform'], ['FormFrontend' => 'perform'], TYPO3CMSExtbaseUtilityExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT

);

Setting the vendor name is now deprecated and must be omitted. Instead, the vendor name will be derived from the controller class namespace, which leads to the second important change.

Both arguments $controllerActions and $nonCacheableControllerActions used controller aliases as array keys. The alias was the controller class name without the namespace and without the Controller suffix. There were a lot of conventions and a quite stupid custom autoloader mechanism before the introduction of the composer autoloader, which made it necessary to put controllers in a specific directory and to name the controller accordingly. As this is no longer the case, there is no need to guess the controller class name any longer. Instead, the configuration/registration is now done with fully qualified controller class names.

::

<?php

TYPO3CMSExtbaseUtilityExtensionUtility::configurePlugin(
'Form', 'Formframework', [TYPO3CMSFormControllerFormFrontendController::class => 'render, perform'], [TYPO3CMSFormControllerFormFrontendController::class => 'perform'], TYPO3CMSExtbaseUtilityExtensionUtility::PLUGIN_TYPE_CONTENT_ELEMENT

);

Conclusion

The following things are deprecated:

  • Prepend the $extensionName argument with a vendor name.
  • Using controller aliases as array keys in both arguments $controllerActions and $nonCacheableControllerActions.

Impact

Using the deprecated syntax will log deprecation warnings and will stop working in TYPO3 11.0.

Affected Installations

All installations that use these methods:

  • \TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin
  • \TYPO3\CMS\Extbase\Utility\ExtensionUtility::registerModule

Migration

  • Omit the vendor name in argument $extensionName
  • Use fully qualified class names as array keys in arguments $controllerActions and $nonCacheableControllerActions