112 lines
3.4 KiB
ReStructuredText
112 lines
3.4 KiB
ReStructuredText
.. include:: /Includes.rst.txt
|
||
|
||
.. _breaking-107578-1759400756:
|
||
|
||
=======================================================================
|
||
Breaking: #107578 - Event AfterCacheableContentIsGeneratedEvent changed
|
||
=======================================================================
|
||
|
||
See :issue:`107578`
|
||
|
||
Description
|
||
===========
|
||
|
||
The frontend rendering event
|
||
:php:`\TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent`
|
||
has been adjusted due to the removal of the
|
||
:php-short:`\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController` class.
|
||
|
||
The method :php:`getController()` has been removed and replaced by two new
|
||
methods: :php:`getContent()` and :php:`setContent()`.
|
||
|
||
Impact
|
||
======
|
||
|
||
Event listeners that call :php:`getController()` will trigger a fatal PHP
|
||
error and must be adapted.
|
||
|
||
Affected installations
|
||
======================
|
||
|
||
This event is commonly used in frontend rendering–related extensions, since
|
||
it provides an opportunity to access and manipulate the fully rendered
|
||
response body content at a late point in the rendering chain.
|
||
|
||
Instances with extensions listening to
|
||
:php-short:`\TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent` may be
|
||
affected. The extension scanner will detect such usages.
|
||
|
||
Migration
|
||
=========
|
||
|
||
In most cases, :php:`AfterCacheableContentIsGeneratedEvent->getController()` was
|
||
used within event listeners to get and modify the
|
||
:php:`TypoScriptFrontendController->content` property at the end of the
|
||
rendering process.
|
||
|
||
The event now provides :php:`getContent()` and :php:`setContent()` methods
|
||
to achieve the same goal more directly.
|
||
|
||
**Before:**
|
||
|
||
.. code-block:: php
|
||
|
||
#[\TYPO3\CMS\Core\Attribute\AsEventListener('my-extension')]
|
||
public function indexPageContent(
|
||
\TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent $event
|
||
): void {
|
||
$tsfe = $event->getController();
|
||
$content = $tsfe->content;
|
||
// ... $content is manipulated here
|
||
$tsfe->content = $content;
|
||
}
|
||
|
||
**After:**
|
||
|
||
.. code-block:: php
|
||
|
||
use TYPO3\CMS\Core\Attribute\AsEventListener;
|
||
use TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent;
|
||
|
||
#[AsEventListener('my-extension')]
|
||
public function indexPageContent(AfterCacheableContentIsGeneratedEvent $event): void
|
||
{
|
||
$content = $event->getContent();
|
||
// ... $content is manipulated here
|
||
$event->setContent($content);
|
||
}
|
||
|
||
**Version check for TYPO3 v13/v14 compatibility:**
|
||
|
||
.. code-block:: php
|
||
|
||
use TYPO3\CMS\Core\Attribute\AsEventListener;
|
||
use TYPO3\CMS\Core\Information\Typo3Version;
|
||
use TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent;
|
||
|
||
#[AsEventListener('my-extension')]
|
||
public function indexPageContent(
|
||
AfterCacheableContentIsGeneratedEvent $event
|
||
): void {
|
||
$version = new Typo3Version();
|
||
if ($version->getMajorVersion() < 14) {
|
||
// @todo: Remove if() when TYPO3 v13 compatibility is dropped
|
||
$tsfe = $event->getController();
|
||
$content = $tsfe->content;
|
||
} else {
|
||
$content = $event->getContent();
|
||
}
|
||
|
||
// ... $content is manipulated here
|
||
|
||
if ($version->getMajorVersion() < 14) {
|
||
// @todo: Remove if() when TYPO3 v13 compatibility is dropped
|
||
$tsfe = $event->getController();
|
||
$tsfe->content = $content;
|
||
} else {
|
||
$event->setContent($content);
|
||
}
|
||
}
|
||
|
||
.. index:: PHP-API, FullyScanned, ext:frontend
|