【问题标题】:Symfony Bundle not creating bundle-configuration yaml file in projectSymfony Bundle 没有在项目中创建 bundle-configuration yaml 文件
【发布时间】:2023-01-16 17:38:21
【问题描述】:

到目前为止,工作包现在需要在使用该包的项目中有自己的配置文件,以单独管理包设置。

但是,无论我使用哪种方法(Symfony 6.1 之前的旧方法或扩展AbstractBundle 的新方法),在项目./config/packages/ 目录中都不会创建任何新的.yaml-File。


这是我的代码(旧样式,在 Symfony 6.1 之前,扩展 Bundle):

捆绑类

mycorpforms/src/MyCorpFormsBundle.php

<?php

namespace MyCorp\FormsBundle;

use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Definition\Configurator\DefinitionConfigurator;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\ExtensionInterface;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
use Symfony\Component\HttpKernel\Bundle\Bundle;

class MyCorpFormsBundle extends Bundle
{
   // empty
}

配置

mycorpforms/src/DependencyInjection/Configuration.php

<?php

namespace MyCorp\FormsBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
{
    public function getConfigTreeBuilder()
    {
        $treeBuilder = new TreeBuilder('mycorp_forms');

        $treeBuilder->getRootNode()
            ->children()
                ->booleanNode('favorite_submenu_enabled')->defaultFalse()->end()
            ->end()
        ;

        return $treeBuilder;
    }
}

延期

mycorpforms/src/DependencyInjection/MyCorpFormsExtension.php

<?php
namespace MyCorp\FormsBundle\DependencyInjection;

use Knp\Bundle\SnappyBundle\DependencyInjection\Configuration;
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;

class MyCorpFormsExtension extends Extension
{

    public function load(array $configs, ContainerBuilder $containerBuilder)
    {
        $loader = new YamlFileLoader(
            $containerBuilder,
            new FileLocator(__DIR__.'/../../config/packages')
        );
        $loader->load('mycorp_forms.yaml');

        $configuration = new Configuration();
        $processor = new Processor();
        $config = $processor->processConfiguration($configuration, $configs);

        $containerBuilder->setParameter('mycorp_forms.favorite_submenu_enabled', $config['favorite_submenu_enabled']);
    }
}

山药

此外,我在包 ./config/packages/ 目录中添加了所需的 mycorp_forms.yaml

这是项目中所需的实际文件:

mycorpforms/config/packages/mycorp_forms.yaml

mycorp_forms:
    # Enable Favorite-Sub-Menu (Requires Knp-Snappy-Bundle !)
    favorite_submenu_enabled: false

该捆绑包可以完美地安装在我的任何项目中,但是没有创建 mycorp_forms.yaml 文件。显然,这需要symfony/flex,这是迄今为止捆绑包本身所需要的。


问:我在这里想念什么?
问:如何在安装包时自动添加这个yaml-文件?我上下阅读文档无数次,但老实说,每次我都更加困惑。


非常感谢您的帮助或解释!

【问题讨论】:

  • yaml 配置文件不是由您的代码中的任何内容创建的。它是由一个食谱.为了创建额外的文件,您需要将您的项目添加到recipe repository
  • 哦,现在这更有意义了。我明白了,这也可以用私有包来完成:symfony.com/doc/current/setup/flex_private_recipes.html。谢谢你指点我!
  • 或者自己复制/粘贴文件,这是我们的祖先必须做的。令人困惑的是 config/bundles.php 将在没有进一步努力的情况下得到更新,但没有内置的方式来复制文件。
  • 好吧,不。 $loader->load 用于服务文件,而不是配置。所以让那些线消失。该框架将自动加载 config/packages 中的所有文件,无论它们的名称如何。 mycorp_forms: 部分下的任何内容都会传递给 $configs 变量中的 MyBundle::load。处理器基本上将 $configs 数据与您的 Configuration 对象合并。所以,是的,让一些东西工作非常混乱。可能有助于查看一些现有的 Symfony 包。
  • 这是一个使用 AbstractBundle 类的非常简单的工作示例。

标签: symfony bundle symfony-bundle


【解决方案1】:

这需要Symfony Flex

要自动生成/更新 .yaml 配置文件,有两种可能的方法:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2014-08-25
    • 2015-01-01
    • 2017-06-19
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多