如何将symfony yaml配置文件转换为xml格式

时间:2011-08-04 13:26:39

标签: xml symfony yaml

我想将symfony配置和路由文件保存为xml文件。 我知道,symfony-book中有很多代码示例,但并未显示所有配置类型。

有没有办法将symfony demo项目提供的现有yaml文件转换为xml文件,以便将这些文件用作基础?

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

那么,有人对此有所了解吗?

请原谅我奇怪的英语,我来自德国......我希望这个事实不会减少我得到答案的机会: - )

5 个答案:

答案 0 :(得分:8)

您可以在YAML / INI / XML与第三方Symfony2 Service Config Converter之间自动转换。

答案 1 :(得分:1)

据我所知,Symfony中没有通用的Yaml-to-XML转储器。我在2009年底发现了Fabien's blog的评论:

  

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

     
    

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

  

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

答案 2 :(得分:1)

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 :(得分:0)

更多评论,例如答案,因为它不能解决真正的问题(从yaml转换为xml),但是评论空间太小,对于该信息而言没有格式,因为它是目前使用php的最新技术配置,而不是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/

答案 4 :(得分:0)

一个简单的解决方案是使用 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');

    }
}