如何在Composer迁移类及扩展的ClassAliasMapResult.php中确定TYPO3版本
Alright, let's walk through exactly how to make your TYPO3 extension compatible across multiple versions by adjusting class alias mappings based on the TYPO3 version—both in ClassAliasMapResult.php and your Composer migration classes.
1. Version Check in ClassAliasMapResult.php
TYPO3 provides the TYPO3_version constant (and a more robust Typo3Version helper class) to detect the current version, so you can tweak your class alias mappings to match the version-specific class structure. Here's a practical implementation:
<?php declare(strict_types=1); namespace YourVendor\YourExtension\ClassAlias; use TYPO3\CMS\Core\Information\Typo3Version; class ClassAliasMapResult { public function getAliasMap(): array { // Use the Typo3Version helper for safe version comparisons (recommended over raw string checks) $typo3Version = new Typo3Version(); $aliasMap = []; // Adjust aliases for TYPO3 12 and above if ($typo3Version->getMajorVersion() >= 12) { $aliasMap = [ 'YourVendor\YourExtension\Legacy\OldClass' => 'YourVendor\YourExtension\New\UpdatedClass', 'TYPO3\CMS\OldCoreNamespace\LegacyCoreClass' => 'TYPO3\CMS\NewCoreNamespace\UpdatedCoreClass', // Add all version-specific class aliases here ]; } // Fallback for TYPO3 11 and older else { $aliasMap = [ 'YourVendor\YourExtension\New\UpdatedClass' => 'YourVendor\YourExtension\Legacy\OldClass', // Map new code references back to legacy class names for older TYPO3 versions ]; } return $aliasMap; } }
Key Tips for This Step:
- Prefer
Typo3VersionoverTYPO3_version: The helper class safely parses version numbers (including betas, patch releases) and lets you check major/minor versions cleanly, avoiding messy string comparisons. - Keep aliases targeted: Only map classes that actually change names or namespaces between TYPO3 versions—don't bloat the map with unnecessary entries.
2. Version Detection in Composer Migration Classes
If you use Composer migration classes to handle extension updates across TYPO3 versions, you can apply the same version-check logic to run version-specific migration steps.
Example migration class:
<?php declare(strict_types=1); namespace YourVendor\YourExtension\Migration; use TYPO3\CMS\Core\Information\Typo3Version; use TYPO3\CMS\Core\Migration\AbstractMigration; class VersionSpecificDatabaseMigration extends AbstractMigration { public function up(): void { $typo3Version = new Typo3Version(); // TYPO3 12+ specific migration steps if ($typo3Version->getMajorVersion() >= 12) { $this->executeQuery('ALTER TABLE tx_yourextension_domain_model_example ADD COLUMN new_version_column VARCHAR(255) DEFAULT NULL;'); $this->executeQuery('DROP TABLE tx_yourextension_legacy_table;'); // Add more 12+ specific changes here } // Legacy steps for TYPO3 11 and below if ($typo3Version->getMajorVersion() <= 11) { $this->executeQuery('ALTER TABLE tx_yourextension_domain_model_example ADD COLUMN legacy_support_column INT DEFAULT 0;'); // Add compatibility steps for older TYPO3 versions } } }
Best Practices to Follow:
- Test across all target versions: Always validate your alias mappings and migrations on every TYPO3 version you support to catch runtime errors early.
- Reference official breaking changes: For major version jumps (like 11 → 12), cross-check TYPO3's official breaking changes docs to ensure you're covering all renamed/moved classes.
内容的提问来源于stack exchange,提问作者Franz Holzinger

