Breaking: #96904 - ext:reports reports do not receive parent object¶
See forge#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.