【问题标题】:How to convert symfony yaml config files to xml format?如何将 symfony yaml 配置文件转换为 xml 格式?
【发布时间】:2011-08-04 13:26:39
【问题描述】:

我希望将 Symfony 配置文件作为 XML 文件。

我知道,symfony-book 中有很多代码示例,但没有显示所有配置类型。

有什么方法可以将 Symfony 演示项目中给出的现有 YAML 文件转换为 XML 文件以使用这些文件作为基础?

我在/Symfony/vendor/symfony/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php 中找到了一个 dumper 类,但我不知道这个工具是否对我的问题有用,不管如何使用它。

【问题讨论】:

    标签: symfony symfony-config-component


    【解决方案1】:

    据我所知,Symfony 中没有通用的 Yaml-to-XML 转储程序。我在 2009 年底从 Fabien's blog 找到了这条评论:

    Fabien — 2009 年 12 月 21 日 10:38 #3

    @simo:您可以创建一个从 XML 到 YAML 的通用转换器,反之亦然,因为语义完全不同。在 symfony 中,我们同时支持 YAML 和 XML,但每个功能的转换都是手工制作的。

    但是,许多第 3 方捆绑包(包括大多数 FriendsOfSymfony bundles)选择使用 XML 作为其配置格式。您可以浏览 github 上的代码以获取示例,或者如果您有特定的转换问题,可以将其带到 StackOverflow。

    【讨论】:

      【解决方案2】:

      Symfony2 包 (2.4.0) 包含用于 AcmeDemoBundle 的 yml 类型文件。更改那些现有的 yml 文件很麻烦。但是,您可以进行一些修改,使新创建的包使用 xml 格式配置和路由。 你可以修改/app/config/config.yml

      # resource: "%kernel.root_dir%/config/routing.yml"
      resource: "%kernel.root_dir%/config/routing.xml"
      

      另外,/app/config/routing_dev.yml

      # resource: routing.yml
      resource: routing.xml
      

      通过进行这些更改,您可以在构建自己的包时选择使用 xml。

      【讨论】:

        【解决方案3】:

        一个简单的解决方案是使用symplify/config-transformer

        首先,安装:

        composer req symplify/config-transformer
        

        然后简单地说:

        vendor/bin/config-transformer switch-format app/config/whatever.yaml -i yaml -o xml
        

        您可以对整个目录执行此操作,也可以切换到基于 PHP 的配置:

        vendor/bin/config-transformer switch-format app/config -i xml -o php
        

        完成此操作后,您可能需要编辑您的 App\Kernel,因为默认情况下它主要是 loads YML files only(以及一些 PHP 配置文件)。

        如果从默认的 5.3 内核开始,并且已将所有配置转换为 XML,则需要更改文件:

        namespace App;
        
        use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;
        use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
        use Symfony\Component\HttpKernel\Kernel as BaseKernel;
        use Symfony\Component\Routing\Loader\Configurator\RoutingConfigurator;
        
        class Kernel extends BaseKernel
        {
            use MicroKernelTrait;
        
            protected function configureContainer(ContainerConfigurator $container): void
            {
                $container->import('../config/{packages}/*.xml');
                $container->import('../config/{packages}/'.$this->environment.'/*.xml');
        
                $container->import('../config/services.xml');
                $container->import('../config/{services}_'.$this->environment.'.xml');
                
            }
        
            protected function configureRoutes(RoutingConfigurator $routes): void
            {
                $routes->import('../config/{routes}/'.$this->environment.'/*.xml');
                $routes->import('../config/{routes}/*.xml');
        
                $routes->import('../config/routes.xml');
        
            }
        }
        

        【讨论】:

          【解决方案4】:

          更多的评论就像一个答案,因为它不能解决真正的问题(从 yaml 转换为 xml),但是评论空间太小并且对于这个信息没有格式化,因为它是目前使用 php 的最先进技术configs 而不是 yaml 或 xml,它可能会被 stackoverflow 社区接受为有用。

          所以当前的解决方案是使用migrify/config-transformer https://github.com/migrify/config-transformer

          vendor/bin/config-transformer switch-format app/config --input-format xml --output-format yaml
          

          今天如何使用 Migrify 从 YAML/XML 配置切换到 PHP
          https://tomasvotruba.com/blog/2020/07/27/how-to-switch-from-yaml-xml-configs-to-php-today-with-migrify/

          从 YAML 切换到 PHP 配置后获得的 10 个很酷的功能
          https://tomasvotruba.com/blog/2020/07/16/10-cool-features-you-get-after-switching-from-yaml-to-php-configs/

          【讨论】:

            猜你喜欢
            • 2014-05-18
            • 1970-01-01
            • 2012-08-13
            • 1970-01-01
            • 1970-01-01
            • 2010-10-06
            • 2018-06-05
            • 2012-12-20
            • 2022-11-28
            相关资源
            最近更新 更多