Php 如何使用Treebuilder在无绑定应用程序中加载自定义配置文件?

Php 如何使用Treebuilder在无绑定应用程序中加载自定义配置文件?,php,symfony,symfony4,Php,Symfony,Symfony4,我正在尝试导入一个名为test.yaml的自定义配置文件 我将test.yaml放在config/packages/local文件夹和config/packages文件夹中 test.yaml文件如下所示: # config/packages/test.yaml test1: 'hello' 当我编译应用程序时,我得到了这个错误:“没有扩展能够加载“test1”的配置” 现在你要告诉我,我需要创建和扩展以及blabla。但是我不明白。有没有一种方法可以在不创建捆绑包的情况下创建扩展。我在文档中

我正在尝试导入一个名为test.yaml的自定义配置文件

我将test.yaml放在config/packages/local文件夹和config/packages文件夹中

test.yaml文件如下所示:

# config/packages/test.yaml
test1: 'hello'
当我编译应用程序时,我得到了这个错误:“没有扩展能够加载“test1”的配置”

现在你要告诉我,我需要创建和扩展以及blabla。但是我不明白。有没有一种方法可以在不创建捆绑包的情况下创建扩展。我在文档中找不到任何关于捆绑包范围外扩展的示例。我的意思是我想在
src
文件夹中创建它

一个相关的问题是:如果我像本例中那样设置TreeBuilder:

是否可以避免创建扩展


Symfony版本是5.1。

几个月前我似乎看到了一个类似的问题,但找不到。src/Kernel类充当AppBundle类,允许您执行注册扩展之类的操作

# src/Kernel.php
class Kernel extends BaseKernel
{
    use MicroKernelTrait;

    protected function prepareContainer(ContainerBuilder $container)
    {
        $container->registerExtension(new TestExtension());
        parent::prepareContainer($container);
    }
...
# src/TestExtension.php
class TestExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        // TODO: Implement load() method.
        dump($configs);
    }
}
至于在没有扩展的情况下处理树生成器,我不知道这是否可行。配置的东西已经够复杂了,所以我自己不会去那里

有点离题,我找不到在内核中使用prepareContainer的实际文档案例。源代码清楚地表明,上面所示的方法将起作用

大多数情况下,特定于应用程序的配置只是在config目录中完成的。捆绑包配置系统的主要目的是允许应用程序覆盖默认捆绑包配置。我并没有真正看到应用程序级扩展的意义。什么可以覆盖它?可能是某种复杂的数据库驱动树生成器?似乎不太可能


这可能是一个仅仅因为你能做某事并不意味着你应该做某事的例子。

似乎我在几个月前看到了一个类似的问题,但找不到它。src/Kernel类充当AppBundle类,允许你做注册扩展之类的事情

# src/Kernel.php
class Kernel extends BaseKernel
{
    use MicroKernelTrait;

    protected function prepareContainer(ContainerBuilder $container)
    {
        $container->registerExtension(new TestExtension());
        parent::prepareContainer($container);
    }
...
# src/TestExtension.php
class TestExtension extends Extension
{
    public function load(array $configs, ContainerBuilder $container)
    {
        // TODO: Implement load() method.
        dump($configs);
    }
}
至于在没有扩展的情况下处理树生成器,我不知道这是否可行。配置的东西已经够复杂了,所以我自己不会去那里

有点离题,我找不到在内核中使用prepareContainer的实际文档案例。源代码清楚地表明,上面所示的方法将起作用

大多数情况下,特定于应用程序的配置只是在config目录中完成的。捆绑包配置系统的主要目的是允许应用程序覆盖默认捆绑包配置。我并没有真正看到应用程序级扩展的意义。什么可以覆盖它?可能是某种复杂的数据库驱动树生成器?似乎不太可能


这可能是因为您可以做某些事情并不意味着您应该做。

对于自定义配置文件,我认为您可能需要添加参数:在顶部,如下所示

# config/packages/test.yaml
parameters:
  test1: hello

对于自定义配置文件,我认为您可能需要在顶部添加参数:如下所示

# config/packages/test.yaml
parameters:
  test1: hello