Skip to content

[FEATURE] Add TYPO3 v14 support - #17

Open
bmack wants to merge 1 commit into
mainfrom
feature/typo3-v14-support
Open

[FEATURE] Add TYPO3 v14 support#17
bmack wants to merge 1 commit into
mainfrom
feature/typo3-v14-support

Conversation

@bmack

@bmack bmack commented Sep 8, 2026

Copy link
Copy Markdown
Member

Makes the extension work on TYPO3 v14 LTS, while keeping v12 LTS and v13 LTS support.

Every API touched here was verified against real 12.4, 13.4 and 14.3 checkouts.

Actual breakage

Two of these were already broken on v13, even though ^13.4 was declared:

  • PageRepository::DOKTYPE_RECYCLER was removed in v13.0 (#101137) — Error: Undefined constant on the first statement of PageWarmupService::warmUp(). The literal 255 is kept in the exclude list so v12 installations keep skipping those pages; on v13+ they were migrated to DOKTYPE_BE_USER_SECTION, which is excluded anyway.
  • RootlineUtility::getCacheIdentifier() became protected in v13.1 — Error: Call to protected method. It was only used for a debug log message, and there is no public replacement, so it is gone from the log.
  • Strict int parameters in SiteFinder::getSiteByPageId(), RootlineUtility::__construct() and LanguageAspectfetchAssociative() returns strings on some platforms and the calling files declare strict_types=1, so this threw a TypeError. Uids are now cast.

Cleanup

  • ext_localconf.php is removed. It registered the class as an auth service with subtype getGroupsFE, which core dropped in v11 (#93108) in favour of ModifyResolvedFrontendGroupsEvent — the event this class already listens to. Dead code since v11.
  • A page that fails no longer aborts the whole run. A translation whose language is missing from the site config throws a bare \InvalidArgumentException out of getLanguageById(), which would kill a 50k page warmup; failures are now reported per page and skipped.
  • WarmupServiceInterface replaces the call_user_func_array() dispatch, and an unknown type argument returns Command::INVALID instead of silently doing nothing.
  • README.md documented cache:warmup; the command is registered as cache:warmupPages.

Version constraints

^12.4 || ^13.4 || ^14.0, PHP ^8.1. ext_emconf.php is 12.4.0-14.3.99 — 14.3 is the v14 LTS.

Version is bumped to 3.0.0 because RootlineWarmupService::__construct() gained a Context argument and ext_localconf.php is gone. Nothing changes for ordinary users.

Testing

Static only: lint, plus API existence and signature comparison across all three LTS trees. Not yet smoke-tested against a running v14 instance.

Two of the core APIs used here were already removed or made
inaccessible in v13, so the declared v13 support never actually
worked:

* PageRepository::DOKTYPE_RECYCLER was removed in v13.0. The value
  255 is kept as a literal, so v12 installations keep skipping
  those pages.
* RootlineUtility::getCacheIdentifier() is protected since v13.1
  and is therefore no longer part of the debug log message.

Page and language uids are now cast to int before they are passed
to the strictly typed core APIs, since the database returns them
as strings on some platforms. A failing page no longer aborts the
whole run, it is reported and skipped instead.

The auth service registration in ext_localconf.php is dropped: its
"getGroupsFE" subtype was removed in v11, and the class is already
wired as a listener for ModifyResolvedFrontendGroupsEvent.

Supported versions are now v12 LTS, v13 LTS and v14 LTS.
@bmack
bmack requested a review from ochorocho September 8, 2026 20:17
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant