• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

TYPO3-Headless / headless / 15632475898

13 Jun 2025 10:31AM UTC coverage: 73.085% (-0.05%) from 73.13%
15632475898

push

github

web-flow
[TASK] Set version v2.1 (#816)

[FEATURE] Allow to replace implementation of HeadlessMode

Also introduce option to site settings `headless.preview.overrideMode` to define behaviour in case of mixed mode when click preview button

# Conflicts:
#	Classes/Middleware/ElementBodyResponseMiddleware.php

9 of 9 new or added lines in 7 files covered. (100.0%)

66 existing lines in 3 files now uncovered.

1097 of 1501 relevant lines covered (73.08%)

8.22 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

83.33
/Classes/Event/Listener/AfterCacheableContentIsGeneratedListener.php
1
<?php
2

3
/*
4
 * This file is part of the "headless" Extension for TYPO3 CMS.
5
 *
6
 * For the full copyright and license information, please read the
7
 * LICENSE.md file that was distributed with this source code.
8
 */
9

10
declare(strict_types=1);
11

12
namespace FriendsOfTYPO3\Headless\Event\Listener;
13

14
use FriendsOfTYPO3\Headless\Json\JsonEncoder;
15
use FriendsOfTYPO3\Headless\Seo\MetaHandler;
16
use FriendsOfTYPO3\Headless\Utility\HeadlessModeInterface;
17
use FriendsOfTYPO3\Headless\Utility\HeadlessUserInt;
18
use Throwable;
19
use TYPO3\CMS\Core\Utility\GeneralUtility;
20

21
use TYPO3\CMS\Frontend\Event\AfterCacheableContentIsGeneratedEvent;
22

23
use function json_decode;
24

25
use const JSON_THROW_ON_ERROR;
26

27
class AfterCacheableContentIsGeneratedListener
28
{
29
    public function __construct(
30
        private readonly JsonEncoder $encoder,
31
        private readonly MetaHandler $metaHandler,
32
        private readonly HeadlessUserInt $headlessUserInt,
33
    ) {}
30✔
34

35
    public function __invoke(AfterCacheableContentIsGeneratedEvent $event)
36
    {
37
        try {
38
            if (!GeneralUtility::makeInstance(HeadlessModeInterface::class)->withRequest($event->getRequest())->isEnabled()) {
30✔
39
                return;
25✔
40
            }
41

42
            if ($this->headlessUserInt->hasNonCacheableContent($event->getController()->content)) {
2✔
43
                // we have dynamic content on page, we fire MetaHandler later on middleware
UNCOV
44
                return;
×
45
            }
46

47
            $content = json_decode($event->getController()->content, true, 512, JSON_THROW_ON_ERROR);
2✔
48

49
            if (($content['seo']['title'] ?? null) === null) {
2✔
UNCOV
50
                return;
×
51
            }
52

53
            $content = $this->metaHandler->process($event->getRequest(), $event->getController(), $content);
2✔
54

55
            $event->getController()->content = $this->encoder->encode($content);
2✔
56
        } catch (Throwable $e) {
3✔
57
            return;
3✔
58
        }
59
    }
60
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc