【发布时间】:2022-09-24 00:52:10
【问题描述】:
我希望我的包从其配置中注入一个全局树枝。
class MyBundle extends AbstractBundle
{
public function build(ContainerBuilder $container): void
{
parent::build($container);
$container->addCompilerPass(new TwigPass());
}
public function loadExtension(array $config, ContainerConfigurator $container, ContainerBuilder $builder): void
{
$theme = $config[\'theme\']; // how to make this a twig global?
// $twig = $builder->getDefinition(\'twig\'); // NOPE! Twig isn\'t loaded yet.
}
编译器传递得到树枝,当我的捆绑扩展加载时,它不可用。
class TwigPass implements CompilerPassInterface
{
public function process(ContainerBuilder $container)
{
if (false === $container->hasDefinition(\'twig\')) {
return;
}
$theme = \'theme_from_config\';
$def = $container->getDefinition(\'twig\');
$def->addMethodCall(\'addGlobal\', [\'theme\', $theme]);
我缺少某些东西,或者某些东西出了问题。编译器如何通过从扩展中获取配置数据?或者,如果那不是正确的方法,我如何从我的捆绑配置中注入一个全局树枝?
-
我不太确定,只是抛出一个想法。你能从你的包中生成并加载一个新的 yaml 配置文件so it is like this 吗?
-
这也可能是一本好书,modifying the config of another bundle,在这种情况下是 Twig 捆绑包。
-
您可以使用controller listener 来完成。但绝对值得一看 prepend 方法以获得更清洁的解决方案。