Stimmt, die $container->getParameter() stehen im Compiler Pass sowohl für eine config.yaml (oder parameters.yaml, was auch immer man lädt) der Erweiterung als auch für die config/config.yaml mit contao.localconfig der Installation zur Verfügung.
Die Contao\Config / $GLOBALS['TL_CONFIG'] ist aber noch nicht vorhanden. Eine Einstellungsmöglichkeit im Backend / tl_settings bleibt somit außen vor. Auch müsste der Build dann nach einer Änderung neu angestoßen werden.
Ansonsten habe ich es hinbekommen. Dabei habe ich hier im Beispiel die Variablenbezeichnungen aus dem AddInsertTagsPass (core-bundle/src/DependencyInjection/Compiler/AddInsertTagsPass.php) weitgehend übernommen.
Ob das so wirklich eine Verbesserung gegenüber dem replaceInsertTags-Hook ist?
Code:
// src/ContaoManager/Plugin.php
...
class Plugin implements BundlePluginInterface, ConfigPluginInterface
{
public function getBundles(ParserInterface $parser): array
{
return [
BundleConfig::create(MeinBundle::class)
->setLoadAfter([ContaoCoreBundle::class]),
];
}
public function registerContainerConfiguration(LoaderInterface $loader, array $managerConfig)
{
$loader->load(static function (ContainerBuilder $container) {
$container->addCompilerPass(new class implements CompilerPassInterface {
public function process(ContainerBuilder $container)
{
$tagName = $container->getParameter('contao.localconfig')['meinInsertTagName'];
$definition = $container->findDefinition('contao.insert_tag.parser');
$service = $container->findDefinition('Vendor\App\MeinInsertTagService');
$subscription = new Definition(InsertTagSubscription::class, [$service, '__invoke', $tagName, null, true, false]);
$definition->addMethodCall('addSubscription', [$subscription]);
}
});
}
}
}
PS:
Was ich noch nicht verstanden habe ist, warum die Insert Tag Services die per Attribut definiert werden, erst nach einem Composer Install und nicht bereits nach einem Cache Warmup zur Verfügung stehen? Ich dachte bisher, bei einem Cache Warmup wird bereits ein komplett neuer Build angestoßen. Für diese Ausführung per Compiler Pass reicht dann doch der Cache Warmup. Zuerst hatte ich den Compiler Pass in der build-Methode der src/MeinBundle.php definiert gehabt. Hier ist dann auch ein Composer Install erforderlich.