---
title: "Deprecation: #95235 - Public getter of services in ModuleTemplate"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:deprecation-95235"
source: "Changelog/11.5/Deprecation-95235-PublicGetterOfServicesInModuleTemplate.rst"
typo3-version: "11.5"
typo3-major: 11
type: "deprecation"
issue: 95235
forge: "https://forge.typo3.org/issues/95235"
tags: ["Backend", "PHP-API", "FullyScanned", "ext:backend"]
rendered: "2026-09-24T21:45:06+00:00"
---

# Deprecation: #95235 - Public getter of services in ModuleTemplate {#deprecation-95235}

See [forge#95235](https://forge.typo3.org/issues/95235)

## Description {#description}

The public methods `getIconFactory` and `getPageRenderer`
in `\TYPO3\CMS\Backend\Template\ModuleTemplate` have been marked as deprecated,
since using this getters only hides the dependencies to those services.

## Impact {#impact}

Calling either `getIconFactory` or `getPageRenderer` will
trigger a PHP `E_USER_DEPRECATED` error. The extension scanner also detects
such calls as weak match.

## Affected Installations {#affected-installations}

All installations calling the methods in custom extension code.

## Migration {#migration}

Inject the corresponding services `\TYPO3\CMS\Core\Imaging\IconFactory`
and `\TYPO3\CMS\Core\Page\PageRenderer` directly in your class.

A current Extbase backend controller might look like:

```php
class MyController extends ActionController
{
    protected ModuleTemplateFactory $moduleTemplateFactory;

    public function __construct(ModuleTemplateFactory $moduleTemplateFactory)
    {
        $this->moduleTemplateFactory = $moduleTemplateFactory;
    }

    public function myAction(): ResponseInterface
    {
        $moduleTemplate = $this->moduleTemplateFactory->create($this->request);
        $moduleTemplate->getPageRenderer()->loadRequireJsModule('Vendor/Extension/MyJsModule');
        $moduleTemplate->setContent($moduleTemplate->getIconFactory()->getIcon('some-icon', Icon::SIZE_SMALL)->render());
        return $this->htmlResponse($moduleTemplate->renderContent());
    }
}
```

This should be migrated to:

```php
class MyController extends ActionController
{
    protected ModuleTemplateFactory $moduleTemplateFactory;
    protected IconFactory $iconFactory;
    protected PageRenderer $pageRenderer;

    public function __construct(
        ModuleTemplateFactory $moduleTemplateFactory,
        IconFactory $iconFactory,
        PageRenderer $pageRenderer
    ) {
        $this->moduleTemplateFactory = $moduleTemplateFactory;
        $this->iconFactory = $iconFactory;
        $this->pageRenderer = $pageRenderer;
    }

    public function myAction(): ResponseInterface
    {
        $moduleTemplate = $this->moduleTemplateFactory->create($this->request);
        $this->pageRenderer->loadRequireJsModule('Vendor/Extension/MyJsModule');
        $moduleTemplate->setContent($this->iconFactory->getIcon('some-icon', Icon::SIZE_SMALL)->render());
        return $this->htmlResponse($moduleTemplate->renderContent());
    }
}
```
