✓ Effizientes Batch-Refactoring

TCA-Migrationen in TYPO3 13

Vier Pakete, zwei veraltete APIs, zwei präzise Prompts
📁 Projekt: alltecfobapackage / mmgallery / pb_downloadform / afproductfinder 📄 Log: tcamigrations 💬 2 Austausche ⏱ ~20 Minuten
Legende:
Vorbildlich
Problematisch
Achtung / Hinweis
Lerntipp

📋 Hintergrund

TYPO3 13 depreciert zwei TCA-Mechanismen, die in allen vier Paketen des Projekts verbreitet sind: searchFields in ctrl (wird nicht mehr ausgewertet) und ExtensionManagementUtility::addPiFlexFormValue() (zugunsten von columnsOverrides aufgegeben). Die Session zeigt, wie Copilot mit Fehlermeldungen als Kontext und Migrationscode als Vorlage großflächige Refactorings effizient und sicher durchführt.

Vier Pakete, eine Session: Die Änderungen betreffen alltecfobapackage, mmgallery, pb_downloadform und afproductfinder. Copilot analysiert alle vier selbstständig, ohne dass jedes Paket einzeln genannt werden muss.

💬 Session-Austausche

Austausch 1 — searchFields-Migration: Fehlermeldungen als Prompt
Entwickler
there are some TCA migration open, respective messages are:

The 'tx_afproductfinder_product' TCA configuration 'searchFields' inside the 'ctrl' section is not evaluated anymore and is therefore removed. Suitable field types, e.g. 'input' are now automatically considered, while using the 'searchable' field config for specific exclusion can be used. Please adjust your TCA accordingly.

Because the field 'link' of 'tx_afproductfinder_product' is considered searchable based on it's TCA type 'link' but is not included in still existing but no longer evaluated 'searchFields' TCA 'ctrl' option, it was automatically set to searchable => false...

fix all TCA files from the 4 folders regarding those messages
Fehlermeldungen direkt als Kontext kopiert. Statt die Anforderung selbst zu formulieren, werden die offiziellen TYPO3-Migrationsmeldungen eingefügt. Copilot bekommt exakte Terminologie, genaue Feldnamen und den Grund für die Änderung – ohne Interpretation.
Scope klar mit "the 4 folders". Copilot weiß aus dem Kontext, welche vier Pakete gemeint sind. Keine Liste nötig – der Agent analysiert selbstständig.
💡Fehlermeldungen sind bessere Prompts als Eigenformulierungen. TYPO3-Deprecation-Meldungen enthalten alle nötigen Informationen: welche Konfiguration, warum, was als Ersatz. Einfach kopieren – Copilot versteht die Sprache.
Copilot
Ich werde alle TCA-Dateien in den 4 Ordnern analysieren und die Migrationshinweise bezüglich der 'searchFields' und 'searchable' Konfiguration beheben.

[analysiert alle 4 Pakete, identifiziert 3 betroffene Dateien:]

Zusammenfassung der benötigten Änderungen:
1. tx_afproductfinder_product.php: searchFields aus ctrl entfernen + searchable => false beim link-Feld
2. tx_mmgallery_domain_model_gallery.php: searchFields entfernen
3. tx_pbdownloadform_domain_model_userdata.php: searchFields entfernen

[führt Änderungen durch, bemerkt beim ersten Versuch ein Problem mit dem Edit, liest Datei erneut, korrigiert erfolgreich]

✅ Alle searchFields erfolgreich entfernt und searchable => false beim link-Feld hinzugefügt.
Analyse vor Aktion. Copilot durchsucht alle 4 Pakete vollständig, bevor er eine einzige Datei ändert. Das gibt dem Entwickler die Möglichkeit, den Plan zu prüfen – kein blindes Schreiben.
Erster Edit schlug fehl – Copilot bemerkt und korrigiert es. Der erste Replace-Versuch wurde nicht korrekt angewendet. Copilot erkennt die Diskrepanz beim Nachprüfen (Datei lesen), formuliert den Edit neu und wendet ihn erfolgreich an. Das Selbstkorrektur-Verhalten funktioniert – aber es dauert einen Extra-Schritt.
Abschließende Validierung. Copilot liest die geänderten Dateien nochmals und überprüft, dass weder searchFields noch das fehlende searchable => false noch vorhanden sind.
Austausch 2 — addPiFlexFormValue-Migration: Migrationscode als Vorlage
Entwickler
in some files of the 4 folders ExtensionManagementUtility::addPiFlexFormValue() is used. this method is deprecated, please replace the usages in the 4 folders using this update method:

Define FlexForm via TCA columnsOverrides
You can also directly define the FlexForm in TCA:
$GLOBALS['TCA']['tt_content']['types']['my_plugin']['columnsOverrides']['pi_flexform']['config']['ds'] = 'FILE:EXT:my_extension/Configuration/FlexForm.xml';
Migrationscode als Kontext – kein Spielraum für Interpretation. Der Prompt enthält das exakte Ersatz-Pattern inklusive Variablennamen. Copilot muss nicht raten, wie die neue API aussieht – er bekommt eine Vorlage und muss nur die konkreten Werte einsetzen.
Gleiche Struktur wie Austausch 1. "in some files of the 4 folders" + deprecated method + replacement pattern. Konsistente Prompt-Struktur über die Session hinweg erleichtert Copilot die Orientierung.
💡Offizielle Dokumentation oder Changelog als Prompt-Vorlage. Der Migrationscode stammt direkt aus der TYPO3-Dokumentation. Einfach den relevanten Abschnitt kopieren – Copilot übersetzt ihn auf den konkreten Projektkontext.
Copilot
Ich werde alle Dateien in den 4 Ordnern überprüfen, um Verwendungen von addPiFlexFormValue() zu finden und diese durch die neue TCA-basierte Methode zu ersetzen.

[findet 11 Dateien mit der veralteten Methode, liest alle 11 Dateien]

Ich habe alle 11 Dateien überprüft. Ich sehe das Muster – alle verwenden addPiFlexFormValue(). Ich ersetze es durch direktes Definieren in der TCA mit columnsOverrides.

[migriert alle 11 Dateien systematisch: pb_downloadform, mmgallery, und 9 Dateien in alltecfobapackage]

[Hinweis: grep zeigt nach den Änderungen noch alte Einträge – Copilot liest Dateien direkt und bestätigt: Änderungen korrekt angewendet]

✅ 11 Dateien migriert. PHP-Syntax aller Dateien validiert, keine Fehler.
Vollständige Cross-Package-Suche vor der ersten Änderung. Copilot liest alle 11 Dateien, bevor er mit dem Schreiben beginnt. Das verhindert inkonsistente Halbmigrationen.
Grep zeigt veraltete Ergebnisse (Cache-Problem). Nach den Änderungen meldet die Suche noch alte Treffer. Copilot interpretiert das zunächst als "Änderung nicht angewendet", liest die Dateien dann direkt – und bestätigt, dass die Änderungen doch korrekt sind. Kein echtes Problem, aber ein Zeichen: Tool-Ergebnisse immer kritisch hinterfragen.
PHP-Syntax-Validierung am Schluss. Copilot führt eine abschließende Syntax-Prüfung durch. Bei Batch-Änderungen an 11 Dateien ist das essentiell – ein Tippfehler in einer Datei würde sonst unbemerkt bleiben.

🎯 Fazit

✓ Mustergültige Batch-Migration mit zwei fokussierten Prompts

Diese Session zeigt, wie zwei voneinander unabhängige TYPO3-Deprecations in einer kompakten Session erledigt werden. Das Muster ist immer gleich: offizieller Migrationstext als Kontext + "fix in the 4 folders". Copilot versteht beide Prompts sofort und liefert vollständige, paketübergreifende Änderungen.

Zwei Besonderheiten stechen hervor: In Austausch 1 schlägt ein Edit zunächst fehl – Copilot bemerkt das beim Nachprüfen und korrigiert sich selbst. In Austausch 2 meldet grep nach den Änderungen noch alte Treffer. Copilot hinterfragt das tool-Ergebnis, liest die Dateien direkt und bestätigt die Korrektheit. Beide Male zeigt Copilot gutes Selbst-Verifikationsverhalten.

Wichtigste Erkenntnis: Bei Deprecation-Migrationen ist die offizielle Fehlermeldung oder Dokumentation der beste Prompt. Wer copy-pastet statt selbst formuliert, gibt Copilot die exakte Terminologie – und bekommt exakten Code zurück.

🎓 Learnings

💡

6 Learnings aus Session G

1

Fehlermeldungen und Deprecation-Logs direkt als Prompt verwenden

TYPO3-Migrationsmeldungen enthalten alle nötigen Informationen: Feldname, Tabellenname, altes Verhalten, neues Verhalten. Einfach kopieren – keine eigene Beschreibung nötig. Copilot versteht die Sprache der Deprecation-Logs.

2

Migrationscode als Vorlage mitgeben, nicht erklären

Statt "ersetze die alte Methode durch die neue" funktioniert "ersetze mit diesem Pattern" deutlich besser. Der konkrete Code aus der Doku oder dem Changelog ist die präziseste Instruktion, die es gibt.

3

Analyse vor Änderung: Copilot liest alle betroffenen Dateien zuerst

Copilot sucht paketübergreifend, erstellt einen Plan und führt ihn dann systematisch aus. Das ist das gewünschte Verhalten: Niemals blind schreiben, immer erst verstehen. Bei 11 Dateien in 4 Paketen ist das besonders wichtig.

4

Selbstkorrektur bei fehlgeschlagenen Edits ist normal

Wenn ein Replace-Versuch nicht angewendet wird (z.B. wegen Whitespace-Unterschieden), erkennt Copilot das beim Nachprüfen und wiederholt den Edit mit angepasstem Muster. Das ist kein Fehler – es ist Selbstverifikation. Wichtig: Copilot dabei nicht unterbrechen.

5

Tool-Ergebnisse können veraltet sein – Copilot hinterfragt sie

Grep kann nach Dateiänderungen noch gecachte Ergebnisse liefern. Wenn Copilot einen Widerspruch zwischen grep-Output und direktem File-Read bemerkt, verlässt er sich auf den direkten File-Read. Das ist das richtige Verhalten – als Entwickler den gleichen Ansatz verfolgen: bei Unsicherheit die Datei direkt prüfen.

6

PHP-Syntax-Validierung nach Batch-Änderungen nicht vergessen

Bei 11 geänderten Dateien ist eine abschließende Syntax-Prüfung essentiell. Copilot führt sie in dieser Session selbstständig durch – aber bei besonders kritischen Migrationen explizit danach fragen: "Prüfe die PHP-Syntax aller geänderten Dateien".

📊 Session-Qualität im Überblick

ElementQualitätAnmerkung
Austausch 1 – Prompt✓ Sehr gutFehlermeldungen direkt kopiert, Scope klar mit "the 4 folders"
Austausch 1 – Analyse✓ Sehr gutAlle 4 Pakete durchsucht, 3 betroffene Dateien korrekt identifiziert
Austausch 1 – Selbstkorrektur⚠ MittelErster Edit schlug fehl; Copilot bemerkt es und korrigiert – kostet einen Extra-Schritt
Austausch 1 – Validierung✓ Sehr gutDateien nach Änderungen nochmals gelesen und geprüft
Austausch 2 – Prompt✓ Sehr gutDeprecated method benannt + exakter Replacement-Code als Vorlage
Austausch 2 – Durchführung✓ Sehr gut11 Dateien in 4 Paketen vollständig und systematisch migriert
Austausch 2 – Grep-Anomalie⚠ HinweisGrep liefert veraltete Ergebnisse; Copilot löst das durch direkten File-Read
Austausch 2 – Syntax-Check✓ Sehr gutPHP-Syntax aller geänderten Dateien validiert

📚 Migrations-Referenz

Veraltete APIErsatzBetroffene Dateien
ctrl → searchFields Automatische Erkennung über Feldtyp; searchable => false für Ausschlüsse 3 Dateien (afproductfinder, mmgallery, pb_downloadform)
addPiFlexFormValue() $GLOBALS['TCA']['tt_content']['types'][$sig]['columnsOverrides']['pi_flexform']['config']['ds'] 11 Dateien (pb_downloadform, mmgallery, alltecfobapackage ×9)

🔗 Weitere Walk-Throughs