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

TYPO3-Headless / headless / 18492719392

14 Oct 2025 09:57AM UTC coverage: 72.804% (-0.7%) from 73.468%
18492719392

Pull #849

github

web-flow
Merge 8eb6602b6 into df0a9feb6
Pull Request #849: [BUGFIX] PHP 8.2 readonly class compatibility in PreviewController

0 of 15 new or added lines in 1 file covered. (0.0%)

1127 of 1548 relevant lines covered (72.8%)

8.28 hits per line

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

0.0
/Classes/XClass/Controller/PreviewController.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\XClass\Controller;
13

14
use FriendsOfTYPO3\Headless\Utility\HeadlessModeInterface;
15
use FriendsOfTYPO3\Headless\Utility\UrlUtility;
16
use TYPO3\CMS\Core\Context\Context;
17
use TYPO3\CMS\Core\Site\Entity\Site;
18
use TYPO3\CMS\Core\Utility\GeneralUtility;
19
use TYPO3\CMS\Core\Information\Typo3Version;
20

21
/**
22
 * This XClass allows you to render frontend URLs for workspaces
23
 * Compatible with both TYPO3 v12 and v13
24
 *
25
 * @codeCoverageIgnore
26
 */
27

28
// Conditional class definition based on TYPO3 version
NEW
29
if (class_exists(Typo3Version::class) && (new Typo3Version())->getMajorVersion() >= 13) {
×
30
    // TYPO3 v13+ version with readonly class and Context parameter
31
    readonly class PreviewController extends \TYPO3\CMS\Workspaces\Controller\PreviewController
32
    {
33
        protected function generateUrl(Site $site, int $pageUid, array $parameters, ?Context $context = null): string
34
        {
NEW
35
            $url = parent::generateUrl($site, $pageUid, $parameters, $context);
×
36

NEW
37
            if (!isset($GLOBALS['TYPO3_REQUEST'])) {
×
NEW
38
                return $url;
×
39
            }
40

NEW
41
            $headlessMode = GeneralUtility::makeInstance(HeadlessModeInterface::class);
×
NEW
42
            $headlessMode = $headlessMode->withRequest($GLOBALS['TYPO3_REQUEST']);
×
NEW
43
            $request = $headlessMode->overrideBackendRequestBySite($site, $parameters['_language'] ?? null);
×
44

NEW
45
            return GeneralUtility::makeInstance(UrlUtility::class)->withRequest($request)->getFrontendUrlForPage($url, $pageUid);
×
46
        }
47
    }
48
} else {
49
    // TYPO3 v12 version without readonly class and without Context parameter
50
    class PreviewController extends \TYPO3\CMS\Workspaces\Controller\PreviewController
51
    {
52
        protected function generateUrl(Site $site, int $pageUid, array $parameters): string
53
        {
NEW
54
            $url = parent::generateUrl($site, $pageUid, $parameters);
×
55

NEW
56
            if (!isset($GLOBALS['TYPO3_REQUEST'])) {
×
NEW
57
                return $url;
×
58
            }
59

NEW
60
            $headlessMode = GeneralUtility::makeInstance(HeadlessModeInterface::class);
×
NEW
61
            $headlessMode = $headlessMode->withRequest($GLOBALS['TYPO3_REQUEST']);
×
NEW
62
            $request = $headlessMode->overrideBackendRequestBySite($site, $parameters['_language'] ?? null);
×
63

NEW
64
            return GeneralUtility::makeInstance(UrlUtility::class)->withRequest($request)->getFrontendUrlForPage($url, $pageUid);
×
65
        }
66
    }
67
}
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

© 2026 Coveralls, Inc