From 58271c8b9a9222b90f27c4a265a445303339b3fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BCrk?= Date: Sun, 7 Jun 2026 20:12:28 +0200 Subject: [PATCH] [TASK] DPL-158: Use php attributes to reduce `Services.yaml` This change uses now available symfony dependency php attributes and TYPO3 attrobutes to reduce the `Services.yaml` file to the bare minimum and also prepares for easier moving of services and classes without the need to adopt in the configuration file. --- Classes/Configuration/Configuration.php | 2 ++ Classes/Controller/CkEditorController.php | 2 ++ .../ApplyLocalizationModesEventListener.php | 7 +++++ ...WritePageViewRegistrationEventListener.php | 5 ++++ .../ProcessLocalizationModeEventListener.php | 8 +++++ .../RenderWriteSelectEventListener.php | 10 +++---- Classes/Hooks/PageRendererHook.php | 2 ++ Classes/Hooks/WriteHook.php | 2 ++ Configuration/Services.yaml | 30 ------------------- composer.json | 2 +- 10 files changed, 34 insertions(+), 36 deletions(-) diff --git a/Classes/Configuration/Configuration.php b/Classes/Configuration/Configuration.php index 9f4c64d..2dc6086 100644 --- a/Classes/Configuration/Configuration.php +++ b/Classes/Configuration/Configuration.php @@ -4,12 +4,14 @@ namespace WebVision\DeeplWrite\Configuration; +use Symfony\Component\DependencyInjection\Attribute\AsAlias; use TYPO3\CMS\Core\Configuration\Exception\ExtensionConfigurationExtensionNotConfiguredException; use TYPO3\CMS\Core\Configuration\Exception\ExtensionConfigurationPathDoesNotExistException; use TYPO3\CMS\Core\Configuration\ExtensionConfiguration; use TYPO3\CMS\Core\Utility\ExtensionManagementUtility; use TYPO3\CMS\Core\Utility\GeneralUtility; +#[AsAlias(id: ConfigurationInterface::class, public: true)] final class Configuration implements ConfigurationInterface { private string $apiKey; diff --git a/Classes/Controller/CkEditorController.php b/Classes/Controller/CkEditorController.php index a87b4f8..eb3f590 100644 --- a/Classes/Controller/CkEditorController.php +++ b/Classes/Controller/CkEditorController.php @@ -7,6 +7,7 @@ use Psr\Http\Message\ResponseFactoryInterface; use Psr\Http\Message\ResponseInterface; use Psr\Http\Message\ServerRequestInterface; +use TYPO3\CMS\Backend\Attribute\AsController; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Fluid\Core\Rendering\RenderingContextFactory; use TYPO3\CMS\Fluid\View\StandaloneView; @@ -21,6 +22,7 @@ * This class is meant to be used within the DeepL write extension and therefore * no public API. Endpoints can change without further information. */ +#[AsController] final class CkEditorController { public function __construct( diff --git a/Classes/Event/Listener/ApplyLocalizationModesEventListener.php b/Classes/Event/Listener/ApplyLocalizationModesEventListener.php index d3c3be0..1cb03f4 100644 --- a/Classes/Event/Listener/ApplyLocalizationModesEventListener.php +++ b/Classes/Event/Listener/ApplyLocalizationModesEventListener.php @@ -4,6 +4,7 @@ namespace WebVision\DeeplWrite\Event\Listener; +use TYPO3\CMS\Core\Attribute\AsEventListener; use TYPO3\CMS\Core\Information\Typo3Version; use WebVision\Deepl\Base\Event\GetLocalizationModesEvent; use WebVision\Deepl\Base\Localization\LocalizationMode; @@ -12,9 +13,15 @@ * Provides DeepL Write related localization modes by listening to the PSR-14 * event {@see GetLocalizationModesEvent} dispatched by extension `deepl_base` * in {@see LocalizationController::dispatchGetLocalizationModesEvent()}. + * + * @todo Move to `Core13/` only code execution. */ final class ApplyLocalizationModesEventListener { + #[AsEventListener( + identifier: 'deeplwrite/deeplwrite-localization-modes-determine', + after: 'deepl-base/determine-default-typo3-localization-modes', + )] public function __invoke(GetLocalizationModesEvent $event): void { $majorVersion = (new Typo3Version())->getMajorVersion(); diff --git a/Classes/Event/Listener/DeeplWritePageViewRegistrationEventListener.php b/Classes/Event/Listener/DeeplWritePageViewRegistrationEventListener.php index ba1aed2..b687e32 100644 --- a/Classes/Event/Listener/DeeplWritePageViewRegistrationEventListener.php +++ b/Classes/Event/Listener/DeeplWritePageViewRegistrationEventListener.php @@ -7,6 +7,7 @@ use TYPO3\CMS\Backend\Routing\Exception\RouteNotFoundException; use TYPO3\CMS\Backend\Routing\UriBuilder; use TYPO3\CMS\Backend\View\PageLayoutContext; +use TYPO3\CMS\Core\Attribute\AsEventListener; use TYPO3\CMS\Core\Utility\GeneralUtility; use WebVision\Deepl\Base\Event\ViewHelpers\ModifyInjectVariablesViewHelperEvent; use WebVision\DeeplWrite\Domain\Enum\RephraseSupportedDeepLLanguage; @@ -17,6 +18,10 @@ */ final class DeeplWritePageViewRegistrationEventListener { + #[AsEventListener( + identifier: 'deepl-write/translation-dropdown', + after: 'deepl-base/default-translation, deepltranslate-core/translation-dropdown', + )] public function __invoke(ModifyInjectVariablesViewHelperEvent $event): void { if ($event->getIdentifier() !== 'languageTranslationDropdown') { diff --git a/Classes/Event/Listener/ProcessLocalizationModeEventListener.php b/Classes/Event/Listener/ProcessLocalizationModeEventListener.php index a83fd36..75446b3 100644 --- a/Classes/Event/Listener/ProcessLocalizationModeEventListener.php +++ b/Classes/Event/Listener/ProcessLocalizationModeEventListener.php @@ -4,10 +4,18 @@ namespace WebVision\DeeplWrite\Event\Listener; +use TYPO3\CMS\Core\Attribute\AsEventListener; use WebVision\Deepl\Base\Event\LocalizationProcessPrepareDataHandlerCommandMapEvent; +/** + * @todo Move to `Core13/` only code execution. + */ final class ProcessLocalizationModeEventListener { + #[AsEventListener( + identifier: 'deeplwrite/deeplwrite-localization-modes-process', + after: 'deepl-base/process-default-typo3-localization-modes', + )] public function __invoke(LocalizationProcessPrepareDataHandlerCommandMapEvent $event): void { // @todo Consider to drop `deepltranslateauto` mode. diff --git a/Classes/Event/Listener/RenderWriteSelectEventListener.php b/Classes/Event/Listener/RenderWriteSelectEventListener.php index dd252e8..84d3b6c 100644 --- a/Classes/Event/Listener/RenderWriteSelectEventListener.php +++ b/Classes/Event/Listener/RenderWriteSelectEventListener.php @@ -9,16 +9,16 @@ use TYPO3\CMS\Core\Site\Entity\Site; use WebVision\DeeplWrite\Generator\WriteDropdownGenerator; -#[AsEventListener( - identifier: 'deeplWrite/render-select' -)] -final class RenderWriteSelectEventListener +final readonly class RenderWriteSelectEventListener { public function __construct( - private readonly WriteDropdownGenerator $writeDropdownGenerator, + private WriteDropdownGenerator $writeDropdownGenerator, ) { } + #[AsEventListener( + identifier: 'deeplWrite/render-select' + )] public function __invoke(RenderAdditionalContentToRecordListEvent $event): void { $request = $event->getRequest(); diff --git a/Classes/Hooks/PageRendererHook.php b/Classes/Hooks/PageRendererHook.php index 013e4e8..b5750f5 100644 --- a/Classes/Hooks/PageRendererHook.php +++ b/Classes/Hooks/PageRendererHook.php @@ -4,8 +4,10 @@ namespace WebVision\DeeplWrite\Hooks; +use Symfony\Component\DependencyInjection\Attribute\Autoconfigure; use TYPO3\CMS\Core\Page\PageRenderer; +#[Autoconfigure(public: true)] final class PageRendererHook { /** diff --git a/Classes/Hooks/WriteHook.php b/Classes/Hooks/WriteHook.php index e137870..03d9fdb 100644 --- a/Classes/Hooks/WriteHook.php +++ b/Classes/Hooks/WriteHook.php @@ -4,6 +4,7 @@ namespace WebVision\DeeplWrite\Hooks; +use Symfony\Component\DependencyInjection\Attribute\Autoconfigure; use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\DataHandling\DataHandler; use TYPO3\CMS\Core\Site\SiteFinder; @@ -14,6 +15,7 @@ use WebVision\DeeplWrite\Service\DeeplService; use WebVision\DeeplWrite\Service\LanguageService; +#[Autoconfigure(public: true)] final class WriteHook { public function __construct( diff --git a/Configuration/Services.yaml b/Configuration/Services.yaml index be5b1f0..30c6842 100644 --- a/Configuration/Services.yaml +++ b/Configuration/Services.yaml @@ -6,33 +6,3 @@ services: WebVision\DeeplWrite\: resource: '../Classes/*' - - WebVision\DeeplWrite\Hooks\WriteHook: - public: true - - WebVision\DeeplWrite\Controller\CkEditorController: - public: true - - WebVision\DeeplWrite\Configuration\ConfigurationInterface: - class: WebVision\DeeplWrite\Configuration\Configuration - - WebVision\DeeplWrite\Event\Listener\ApplyLocalizationModesEventListener: - tags: - - name: 'event.listener' - identifier: 'deeplwrite/deeplwrite-localization-modes-determine' - event: WebVision\Deepl\Base\Event\GetLocalizationModesEvent - after: 'deepl-base/determine-default-typo3-localization-modes' - - WebVision\DeeplWrite\Event\Listener\ProcessLocalizationModeEventListener: - tags: - - name: 'event.listener' - identifier: 'deeplwrite/deeplwrite-localization-modes-process' - event: WebVision\Deepl\Base\Event\LocalizationProcessPrepareDataHandlerCommandMapEvent - after: 'deepl-base/process-default-typo3-localization-modes' - - WebVision\DeeplWrite\Event\Listener\DeeplWritePageViewRegistrationEventListener: - tags: - - name: 'event.listener' - identifier: 'deepl-write/translation-dropdown' - event: WebVision\Deepl\Base\Event\ViewHelpers\ModifyInjectVariablesViewHelperEvent - after: 'deepl-base/default-translation, deepltranslate-core/translation-dropdown' diff --git a/composer.json b/composer.json index b049e58..d23b6d6 100644 --- a/composer.json +++ b/composer.json @@ -14,7 +14,7 @@ "friendsofphp/php-cs-fixer": "^3.70", "helmich/typo3-typoscript-lint": "^3.1.0", "phpstan/phpstan": "^1.12.33", - "phpunit/phpunit": "^10.5.63", + "phpunit/phpunit": "^10.5", "saschaegerer/phpstan-typo3": "^1.10.2", "typo3/testing-framework": "^8.3.1" },