Installation
composer require a9f/fractor-typoscript --dev
Add to your fractor.json (or fractor.php):
{
"extensions": [
"a9f/fractor-typoscript"
]
}
First Use Case
Process a TypoScript file (ext_typoscript/setup.typoscript or Configuration/TypoScript/setup.typoscript):
fractor process path/to/file.typoscript
Key Files to Review
src/Processor/TypoScriptProcessor.php (core logic)src/Rule/ (default rules, if any exist)tests/ (for edge cases and examples)Basic File Processing
use A9F\FractorTypoScript\Processor\TypoScriptProcessor;
$processor = new TypoScriptProcessor();
$result = $processor->process(file_get_contents('setup.typoscript'));
file_put_contents('setup.typoscript', $result);
Custom Rule Integration
Extend A9F\FractorTypoScript\Rule\AbstractRule to create domain-specific rules:
namespace App\Fractor\Rules;
use A9F\FractorTypoScript\Rule\AbstractRule;
class NoHardcodedPageIds extends AbstractRule {
protected function getPattern(): string {
return '/page = \d+/';
}
}
Register in fractor.php:
'rules' => [
\App\Fractor\Rules\NoHardcodedPageIds::class,
],
Integration with Laravel Use Laravel’s service container to bind the processor:
$this->app->bind(TypoScriptProcessor::class, function ($app) {
return new TypoScriptProcessor($app['config']['fractor.typoscript']);
});
Trigger via Artisan command:
php artisan fractor:process path/to/setup.typoscript
CI/CD Pipeline
Add to composer.json scripts:
"scripts": {
"post-update-cmd": [
"@fractor process typo3conf/ext/*/Configuration/TypoScript/setup.typoscript"
]
}
Parser Limitations
helmich/typo3-typoscript-parser may struggle with:
typo3/sysext/core/Classes/Utility/TypoScriptUtility.php before processing.stdWrap with nested conditions) might not parse correctly.
Tip: Test with real-world files early.Rule Conflicts
getPriority() in AbstractRule to control execution order.File Caching
$processor->setCacheEnabled(false);
TYPO3 Version Compatibility
lib.) may break.
Tip: Use TYPO3\CMS\Core\Utility\VersionNumberUtility to check compatibility.fractor process --verbose path/to/file.typoscript
$parser = new \Helmich\Typo3TypoScriptParser\Parser();
$ast = $parser->parse(file_get_contents('setup.typoscript'), true); // Enable debug
Custom Processors
Implement A9F\FractorTypoScript\Processor\ProcessorInterface for non-TypoScript file types (e.g., YAML configs).
Pre/Post-Processing Hooks
Override TypoScriptProcessor::preProcess() or postProcess() for file-level transformations.
Rule Validation
Add isApplicable() to rules to skip irrelevant files (e.g., only process setup.typoscript).
How can I help you explore Laravel packages today?