首页 > 解决方案 > 如何从 Bundle 中注册新的 Twig 命名空间?

问题描述

我寻找一种方法来更改 Symfony 树枝包的配置,以便注册额外的树枝命名空间。

我绊倒了前置扩展,但这只会解决一半的问题。当我写这样的代码时:

public function prepend(ContainerBuilder $container)
    {
        $bundles = $container->getParameter('kernel.bundles');

        if (isset($bundles['TwigBundle'])) {

            $config = $container->getExtensionConfig('twig')[0];
            $paths = ['/path/to/cms' => 'cms'];

            if (array_key_exists('path', $config)) {
                $paths = array_merge($config['paths'], $paths);
            }

            $config['paths'] = $paths;

            $container->prependExtensionConfig('twig', $config);
        }
    }

这意味着没有其他包可以再次更改树枝配置:

多于一捆

如何从包内添加树枝命名空间而不妨碍其他包做同样的事情?

标签: phpsymfonytwig

解决方案


Twig 命名空间是一个应用程序问题,而不是包问题。

从包中注册新的名称空间可能会与使用该包的应用程序已定义的名称空间发生冲突。

此外,这不是必需的,因为 Symfony已经为每个 bundle 自动创建了一个命名空间

如果您在应用程序中安装包/包,它们可能包含自己的 Twig 模板(在Resources/views/每个包的目录中)。为了避免弄乱你自己的模板,Symfony 在包名称之后创建的自动命名空间下添加包模板。

例如,被调用的包的模板AcmeFooBundle在命名空间下可用AcmeFoo。如果此捆绑包包含模板<your-project>/vendor/acmefoo-bundle/Resources/views/user/profile.html.twig,您可以将其称为@AcmeFoo/user/profile.html.twig.

你不应该弄乱那个配置。让应用程序开发人员或框架来处理它。


推荐阅读