Breaking: #96904 - ext:reports reports do not receive parent object

See Issue #96904

Description

Extensions that add own reports in EXT:reports do not receive an instance of TYPO3\CMS\Reports\Controller\ReportController as constructor argument anymore.

Handing over “parent object” to single reports as manual constructor argument was pretty much useless since all state in ReportController is protected. Not having this constructor argument has the advantage that reports can now use dependency injection.

Impact

Extensions that register own reports to the EXT:reports extension and type hint ReportController as constructor argument will trigger a fatal PHP error since that argument is no longer provided by the API.

Affected Installations

Instances with extensions that add own reports to EXT:reports may be affected.

Migration

Do not expect to retrieve an instance of ReportController as constructor argument anymore. Code before:

class MyClass implements ReportInterface
{
    public function __construct(ReportController $reportController)
    {
        // ...
    }
}
class MyClass implements ReportInterface
{
    // No manual constructor argument anymore, but have a dependency injection as example.
    public function __construct(private readonly SomeDependency $someDependency)
    {
    }
}

Single reports are currently instantiated using GeneralUtility::makeInstance(). To use dependency injection in own reports, a report class thus needs to be defined public: true in a Configuration/Services.yaml file. This may change with further TYPO3 v12 development if the reports registration is changed, though. If in doubt, just try to go without public: true. If this leads to a fatal PHP error, add it.