TYPO3 v14 API reference: how to write v14 code. Covers controllers, building a view with ViewFactory, Fluid templates, PSR-14 events that replaced old hooks, backend modules, TCA, QueryBuilder queries without SQL injection, CLI commands and tests. Use when the user asks what a v14 API looks like, which event replaced a hook, how to build or write a specific piece of v14 code, or which class, interface or namespace to use. Does NOT run upgrades or migrations: for a whole project or site upgrade use typo3-upgrade-run, which owns the version constraint, the PHP target and the process.
Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
TYPO3 v14 API reference: how to write v14 code. Covers controllers, building a view with ViewFactory, Fluid templates, PSR-14 events that replaced old hooks, backend modules, TCA, QueryBuilder queries without SQL injection, CLI commands and tests. Use when the user asks what a v14 API looks like, which event replaced a hook, how to build or write a specific piece of v14 code, or which class, interface or namespace to use. Does NOT run upgrades or migrations: for a whole project or site upgrade use typo3-upgrade-run, which owns the version constraint, the PHP target and the process.
Strategy: This collection targets TYPO3 v14.x only. Patterns here assume a v14 codebase.
For migrating from older majors, use typo3-rector, typo3-extension-upgrade, Fractor, and the official upgrade guide first.
Scope — read this before using any constraint below. This skill is the : how v14 code is written. It does not run upgrades.
Upgrading a whole project or site from v12/v13 is , which owns the version constraints, the PHP target, the policy and the migration process end to end.
— load it first for an upgrade run and use this skill as the API reference during its manual-migration phase.
v14 API reference
typo3-upgrade-run
ext_emconf.php
Where the two differ, typo3-upgrade-run wins
TYPO3 API First: Always use TYPO3's built-in APIs, core features, and established conventions before creating custom implementations. Do not reinvent what TYPO3 already provides. Always verify that the APIs and methods you use exist and are not deprecated in TYPO3 v14 by checking the official TYPO3 documentation.
1. Version Strategy
Target: TYPO3 v14.x only
Version
Role for this collection
v14.x
Supported target — examples and constraints assume TYPO3 v14
Older majors
Not targeted — complete a core upgrade, then use these patterns
Best Practice: Declare TYPO3 v14-only constraints in composer.json. Composer is the single source of truth in v14 — see the ext_emconf.php note below before adding one.
Target ^14.3, not ^14.0: 14.3 is the supported LTS line, and 14.0 through 14.2 no longer receive security updates. A reusable package that genuinely tests a broader range may widen the constraint, but it must then prove it in CI rather than assert it.
Content Blocks:friendsoftypo3/content-blocks requires typo3/cms-core ^14.3 or higher — match the Packagist constraint before pinning anything lower.
ext_emconf.php — Classic mode and TER publishing only
TYPO3 feature #108345 deprecates ext_emconf.php in v14; v15 no longer evaluates it. Composer-mode extensions should not ship one. Keep it only where a tool still requires it — TER/Tailor publishing, or a Classic-mode installation — and then keep it exactly in sync with composer.json:
For a full project or site upgrade, typo3-upgrade-run owns this policy and removes the file for project-local extensions in packages/.
2. PHP Requirements
Core floor 8.2 — project target 8.4 (8.5 where it resolves)
TYPO3 v14 Core requires PHP 8.2+, so a reusable package that tests and documents the broader range may declare ^8.2. Project and site work in this collection targets PHP 8.4 as the standard, and PHP 8.5 is supported and preferred where the whole dependency set resolves on it — check composer why-not php 8.5 and fall back to 8.4 when a package blocks. typo3-upgrade-run enforces the 8.4 floor and gates on it.
<htmlxmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"xmlns:core="http://typo3.org/ns/TYPO3/CMS/Core/ViewHelpers"data-namespace-typo3-fluid="true"><f:layoutname="Default" /><f:sectionname="Main"><divclass="content"><!-- ✅ Auto-escaped output --><h1>{item.title}</h1><!-- ✅ Explicit HTML (use with caution) --><f:format.html>{item.bodytext}</f:format.html><!-- ✅ Conditional rendering --><f:ifcondition="{items}"><f:then><f:foreach="{items}"as="item"><f:renderpartial="Item"arguments="{item: item}" /></f:for></f:then><f:else><p>No items found.</p></f:else></f:if><!-- ✅ Link building --><f:link.actionaction="show"arguments="{item: item.uid}">
View Details
</f:link.action></div></f:section></html>
Fluid parses a partial as its own template. A custom ViewHelper namespace declared only in the
calling template or layout is not inherited by that partial; declare the namespace in every file
that uses it. Verify templateRootPaths, partialRootPaths and layoutRootPaths, then render every
retained CType, plugin/list type and page template at least once. Cache warm-up does not compile a
template path no request reaches.
5. Event System (TYPO3 v14)
PSR-14 Event Listeners
PSR-14 events are the standard in TYPO3 v14. Always prefer events over hooks.
Core ships no generic BeforeRecordOperationEvent / AfterRecordOperationEvent; use SC_OPTIONS DataHandler hooks or documented TYPO3\CMS\Core\DataHandling\Event\* only (list)
Services.yaml Registration
# Configuration/Services.yamlservices:_defaults:autowire:trueautoconfigure:truepublic:falseVendor\Extension\:resource:'../Classes/*'exclude:-'../Classes/Domain/Model/*'# Event listener (alternative to #[AsEventListener] attribute)Vendor\Extension\EventListener\MyListener:tags:-name:event.listeneridentifier:'vendor-extension/my-listener'
Detailed Reference
Read the full guide when the task needs detailed examples, long templates, troubleshooting matrices, appendices, or sections not included above. Keep this file unloaded for narrow tasks so the skill follows progressive disclosure.