我想将symfony配置和路由文件保存为xml文件。 我知道,symfony-book中有很多代码示例,但并未显示所有配置类型。
有没有办法将symfony demo项目提供的现有yaml文件转换为xml文件,以便将这些文件用作基础?
我在' /Symfony/vendor/symfony/src/Symfony/Component/DependencyInjection/Dumper/XmlDumper.php 中找到了一个转储类 但我不知道这个工具是否对我的问题有用,更不用说如何使用它了。
那么,有人对此有所了解吗?
请原谅我奇怪的英语,我来自德国......我希望这个事实不会减少我得到答案的机会: - )
答案 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');
}
}