5

我想将 Symfony 配置文件作为 XML 文件。

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

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

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

4

4 回答 4

2

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

法比安 — 2009 年 12 月 21 日 10:38 #3

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

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

于 2011-08-04T14:36:08.980 回答
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。

于 2013-12-12T19:31:41.073 回答
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 -迁移/

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

于 2020-10-04T17:29:29.423 回答
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,因为默认情况下它主要只加载 YML 文件(和一些 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');

    }
}
于 2021-04-27T06:41:24.940 回答