---
title: "Breaking: #97320 - Register Report and Status via Service Configuration"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:breaking-97320"
source: "Changelog/12.0/Breaking-97320-RegisterReportAndStatusViaServiceConfiguration.rst"
typo3-version: "12.0"
typo3-major: 12
type: "breaking"
issue: 97320
forge: "https://forge.typo3.org/issues/97320"
tags: ["Backend", "LocalConfiguration", "PHP-API", "FullyScanned", "ext:reports"]
rendered: "2026-09-23T16:35:56+00:00"
---

# Breaking: #97320 - Register Report and Status via Service Configuration {#breaking-97320}

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

## Description {#description}

The `reports` and `status` in EXT:reports are now registered via service
configuration, see the [feature changelog](https://docs.typo3.org/permalink/changelog:feature-97320).
Therefore the registration via
`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']`
has been removed.

Additionally, to be able to use autoconfiguration, the following interfaces have been extended:

-   `\TYPO3\CMS\Reports\ReportInterface`: `getIdentifier`, `getIconIdentifier`, `getTitle`, `getDescription`
-   `\TYPO3\CMS\Reports\StatusProviderInterface`: `getLabel`

## Impact {#impact}

Registration of custom `reports` via `$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']`
are not evaluated anymore.

Registration of custom `status` via `$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['tx_reports']['status']['providers']`
are not evaluated anymore.

`ReportInterface` and `StatusProviderInterface`: are extended by the mentioned methods. If the required methods are not implemented it will lead to fatal errors.

## Affected Installations {#affected-installations}

All TYPO3 installations using the old registration.

All TYPO3 installations with custom `reports`, not implementing `public function getIdentifier()`,
`public function getIconIdentifier()`, `public function getTitle()`, `public function getDescription()`

All TYPO3 installations with custom `status`, not implementing
`public function getLabel()`

## Migration {#migration}

By implementing the required methods of the interfaces, the custom reports are fully backwards compatible.

If TYPO3 v12+ is the only supported version, the configuration `$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']` from the `ext_localconf.php` file can be removed as well.

### Report {#report}

If `autoconfigure` is not enabled in your `Configuration/Services.(yaml|php)`,
add the tag `reports.report` manually to your `reports` service.

```yaml
Vendor\Extension\Report\MyReport:
  tags:
    - name: reports.report
```

The old registration can be removed, if support for TYPO3 v11 or lower is not
necessary.

```php
// Before in ext_localconf.php

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['extension']['general'] = [
    'title' => 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:title',
    'description' => 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:description',
    'icon' => 'EXT:extension/Resources/Public/Icons/Extension.svg',
    'report' => \Vendor\Extension\Report::class
];
```

Additionally, make sure to implement all methods of `\TYPO3\CMS\Reports\ReportInterface`.

```php
// Changes for the report

class Report implements ReportInterface
{
    public function getReport(): string
    {
        return 'Full report';
    }

    public function getIdentifier(): string
    {
        return 'general';
    }

    public function getTitle(): string
    {
        return 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:title';
    }

    public function getDescription(): string
    {
        return 'LLL:EXT:extension/Resources/Private/Language/locallang.xlf:description';
    }

    public function getIconIdentifier(): string
    {
        return 'module-reports';
    }
}
```

Refer to the [Icon API](https://docs.typo3.org/permalink/changelog:feature-94692-1657826754)
on how to register the icon.

### Status {#status}

If `autoconfigure` is not enabled in your `Configuration/Services.(yaml|php)`,
add the tag `reports.status` manually to your `status` service.

```yaml
Vendor\Extension\Status\MyStatus:
  tags:
    - name: reports.report
```

The old registration can be removed, if support for TYPO3 v11 or lower is not
necessary.

```php
// Before in ext_localconf.php

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['reports']['tx_reports']['status']['providers']['label'] = [
    \Vendor\Extension\Status::class,
];
```

Additionally, make sure to implement all methods of `\TYPO3\CMS\Reports\StatusProviderInterface`.

```php
// Changes for the Status

class Status implements StatusProviderInterface
{
    public function getStatus(): array
    {
        return [];
    }

    public function getLabel(): string
    {
        return 'label';
    }
}
```
