Skip to content

Commit 5de0782

Browse files
authored
[!!!][TASK] Refactor TSFE->content away (#6068)
Resolves: TYPO3-Documentation/Changelog-To-Doc#1346 Releases: main
1 parent 6b9e1eb commit 5de0782

File tree

6 files changed

+115
-28
lines changed

6 files changed

+115
-28
lines changed

Documentation/ApiOverview/Events/Events/Frontend/AfterCacheableContentIsGeneratedEvent.rst

Lines changed: 63 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,12 @@
66
AfterCacheableContentIsGeneratedEvent
77
=====================================
88

9+
.. important::
10+
.. versionchanged:: 14.0
11+
Method :php:`getController()` is removed and substituted with methods :php:`getContent()`
12+
and :php:`setContent()`. See also
13+
`Breaking: #107578 - Event AfterCacheableContentIsGeneratedEvent changed <https://docs.typo3.org/permalink/changelog:breaking-107578-1759400756>`_´.
14+
915
The PSR-14 event
1016
:php:`\TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent` can be
1117
used to decide if a page should be stored in cache.
@@ -15,30 +21,75 @@ It can also be used to manipulate the content before it is stored in
1521
TYPO3's page cache. In the Core, the event is used in
1622
:doc:`EXT:indexed_search <ext_indexed_search:Index>` to index cacheable content.
1723

18-
The :php:`AfterCacheableContentIsGeneratedEvent` contains the
24+
The :php-short:`\TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent` contains the
1925
information if a generated page is able to store in cache via the
20-
:php:`$event->isCachingEnabled()` method. This can be used to
21-
differentiate between the previous hooks `contentPostProc-cached` and
22-
`contentPostProc-all`. The later hook was called regardless of whether the
23-
cache was enabled or not.
26+
:php:`$event->isCachingEnabled()` method.
27+
28+
.. _AfterCacheableContentIsGeneratedEvent-example:
2429

2530
Example
2631
=======
2732

28-
.. todo: The property TSFE->content used in the example was marked as internal
29-
in v13. A substitution is needed for this.
30-
31-
.. note::
32-
Currently, the example below is outdated. It uses a - now internal -
33-
property :php:`TypoScriptFrontendController->content`.
34-
3533
.. literalinclude:: _AfterCacheableContentIsGeneratedEvent/_MyEventListener.php
3634
:language: php
3735
:caption: EXT:my_extension/Classes/Frontend/EventListener/MyEventListener.php
3836

3937
.. include:: /_includes/EventsAttributeAdded.rst.txt
4038

39+
.. _AfterCacheableContentIsGeneratedEvent-api:
40+
4141
API
4242
===
4343

4444
.. include:: /CodeSnippets/Events/Frontend/AfterCacheableContentIsGeneratedEvent.rst.txt
45+
46+
.. _AfterCacheableContentIsGeneratedEvent-migration-getcontroller:
47+
48+
Migration from `AfterCacheableContentIsGeneratedEvent::getController()`
49+
=======================================================================
50+
51+
In most cases, method :php:`AfterCacheableContentIsGeneratedEvent->getController()`
52+
was used in event listeners to get and/or set
53+
:php:`TypoScriptFrontendController->content` at a late point within the frontend
54+
rendering chain.
55+
56+
The event has been changed by removing :php:`getController()` and adding
57+
:php:`getContent()` and :php:`setContent()` instead.
58+
59+
.. code-block:: diff
60+
61+
#[AsEventListener('my-extension')]
62+
public function indexPageContent(AfterCacheableContentIsGeneratedEvent $event): void
63+
{
64+
- $tsfe = $event->getController();
65+
- $content = $tsfe->content;
66+
* $content = $event->getContent();
67+
// ... $content is manipulated here
68+
- $tsfe->content = $content;
69+
* $event->setContent($content);
70+
}
71+
72+
Extensions aiming for TYPO3 v13 and v14 compatibility in a single version can use a version
73+
check gate:
74+
75+
.. code-block:: php
76+
77+
#[AsEventListener('my-extension')]
78+
public function indexPageContent(AfterCacheableContentIsGeneratedEvent $event): void
79+
{
80+
if ((new Typo3Version)->getMajorVersion() < 14) {
81+
// @todo: Remove if() when TYPO3 v13 compatibility is dropped, keep else body only
82+
$tsfe = $event->getController();
83+
$content = $tsfe->content;
84+
} else {
85+
$content = $event->getContent();
86+
}
87+
// ... $content is manipulated here
88+
if ((new Typo3Version)->getMajorVersion() < 14) {
89+
// @todo: Remove if() when TYPO3 v13 compatibility is dropped, keep else body only
90+
$tsfe = $event->getController();
91+
$tsfe->content = $content;
92+
} else {
93+
$event->setContent($content);
94+
}
95+
}

Documentation/ApiOverview/Events/Events/Frontend/AfterCachedPageIsPersistedEvent.rst

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
1-
.. include:: /Includes.rst.txt
2-
.. index:: Events; AfterCachedPageIsPersistedEvent
3-
.. _AfterCachedPageIsPersistedEvent:
1+
.. include:: /Includes.rst.txt
2+
.. index:: Events; AfterCachedPageIsPersistedEvent
3+
.. _AfterCachedPageIsPersistedEvent:
44

55
===============================
66
AfterCachedPageIsPersistedEvent
77
===============================
88

9-
This event together with :ref:`AfterCacheableContentIsGeneratedEvent` has
10-
been introduced to serve as a direct replacement for the removed hook:
11-
12-
* :php:`$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['tslib/class.tslib_fe.php']['insertPageIncache']`
13-
149
The PSR-14 event :php:`\TYPO3\CMS\Frontend\Event\AfterCachedPageIsPersistedEvent`
1510
is commonly used to generate a static file cache. This event is only called if
1611
the page was actually stored in TYPO3's page cache.
1712

13+
.. _AfterCachedPageIsPersistedEvent-example:
14+
1815
Example
1916
=======
2017

@@ -24,6 +21,8 @@ Example
2421

2522
.. include:: /_includes/EventsAttributeAdded.rst.txt
2623

24+
.. _AfterCachedPageIsPersistedEvent-api:
25+
2726
API
2827
===
2928

Documentation/ApiOverview/Events/Events/Frontend/_AfterCacheableContentIsGeneratedEvent/_MyEventListener.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public function __invoke(AfterCacheableContentIsGeneratedEvent $event): void
1818
if (!$event->isCachingEnabled()) {
1919
return;
2020
}
21-
$event->getController()->content = str_replace(
21+
$event->setContent(str_replace(
2222
'foo',
2323
'bar',
24-
$event->getController()->content,
25-
);
24+
$event->getContent(),
25+
));
2626
}
2727
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace MyVendor\MyExtension\Frontend\EventListener;
6+
7+
use TYPO3\CMS\Core\Attribute\AsEventListener;
8+
use TYPO3\CMS\Core\Information\Typo3Version;
9+
use TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent;
10+
11+
final readonly class MyEventListener
12+
{
13+
#[AsEventListener('my-extension')]
14+
public function indexPageContent(AfterCacheableContentIsGeneratedEvent $event): void
15+
{
16+
if ((new Typo3Version())->getMajorVersion() < 14) {
17+
// @todo: Remove if() when TYPO3 v13 compatibility is dropped, keep else body only
18+
$tsfe = $event->getController();
19+
$content = $tsfe->content;
20+
} else {
21+
$content = $event->getContent();
22+
}
23+
// ... $content is manipulated here
24+
if ((new Typo3Version())->getMajorVersion() < 14) {
25+
// @todo: Remove if() when TYPO3 v13 compatibility is dropped, keep else body only
26+
$tsfe = $event->getController();
27+
$tsfe->content = $content;
28+
} else {
29+
$event->setContent($content);
30+
}
31+
}
32+
}

Documentation/CodeSnippets/Events/Form/BeforeFormIsDuplicatedEvent.rst.txt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
44
.. php:class:: BeforeFormIsDuplicatedEvent
55
6-
Listeners to this event will be able to modify a form before it is duplicated.
6+
Listeners to this Event will be able to modify the form definition
7+
and persistence identifier before a form is duplicated.
78

8-
.. php:attr:: form
9+
.. php:attr:: formPersistenceIdentifier
910
:public:
1011

11-
.. php:attr:: formPersistenceIdentifier
12+
.. php:attr:: form
1213
:public:

Documentation/CodeSnippets/Events/Frontend/AfterCacheableContentIsGeneratedEvent.rst.txt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@
1111
.. php:method:: getRequest()
1212
:returns: `\Psr\Http\Message\ServerRequestInterface`
1313

14-
.. php:method:: getController()
15-
:returns: `\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController`
14+
.. php:method:: getContent()
15+
:returns: `string`
16+
17+
.. php:method:: setContent(string $content)
18+
19+
:param $content: the content
1620

1721
.. php:method:: isCachingEnabled()
1822
:returns: `bool`

0 commit comments

Comments
 (0)