sallyx/nette-xml-adapter

Nette 依赖注入组件的 XML 适配器

v2.0.0 2020-03-31 08:54 UTC

This package is not auto-updated.

Last update: 2024-09-25 06:52:46 UTC


README

Build Status

XML 适配器可用于编写 XML 配置。感谢命名空间的使用(http://www.sallyx.org/xmlns/nette/config/1.0),您可以在同一个 XML 文件中拥有适用于您的 PHP 应用程序(Nette)和其他应用程序的通用配置。

XmlAdapter 读取 XML 文件并将其转换为 PHP 数组。

在这里查看 xml 示例: tests/Adapters/files/xmlAdapter.xml

支持的类型

关联数组

<myarray><key1>value1</key1><key2>value2</key2></myarray>

变为

[key1 => 'value1', key2=>'value2']

数字数组

<myarray array="numeric"><key>value1</key><key>value2</key></myarray>

变为 (此处忽略元素名称

[0=>'value1',1=>'value2]

字符串、Null、数字、布尔值

<myarray array="numeric">
<x> trimmed string </x>
<x space="preserve"> string with spaces  </x>
<x>1</x>
<x number="2"/>
<x bool="yes"/>
<x null="null" />
</myarray>

变为

["trimmed string", " string with spaces  ","1", 2, TRUE, NULL]

布尔值支持 "yes"、"true"、"on" 和 "1"

语句

<factory statement="statement">
    <s><ent>DateTime</ent><args><a numeric="0" /></args></s>
   <s><ent>format</ent><args><a>%B</a></args></s>
</factory>

等同于 neon:DateTime(0)::format("%B")

语法糖

字符串数组

<myarray array="string">1,2,3</myarray>

变为

["1", "2", "3"]

与自定义分隔符相同

<myarray array="string" delimiter=";">1;2;3</myarray>

语句

当然,您可以使用 array from string 作为语句参数。

<xxx statement="statement">
<s><ent>fooo</ent><args array="string" delimiter=";">1;2;3</args></s>
</xxx>

如果只有一个参数,您不需要在 args 元素中使用元素。这些语句是等效的

<xxx statement="statement"><s><ent>fooo</ent><args><a>1</a></args></s></xxx>
<xxx statement="statement"><s><ent>fooo</ent><args>1</args></s></xxx>

您可以使用 neon 语法作为语句

<xxx statement="DateTime(0)::format('%B')" />

# 使用

使用 composer 安装

composer require sallyx/nette-xml-adapter

测试

require 'vendor/autoload.php';
use Sallyx\Nette\DI\Config\Adapters\XmlAdapter;

$adapter = new XmlAdapter;
$file = 'vendor/sallyx/nette-xml-adapter/tests/Adapters/files/xmlAdapter.xml';
$config = $adapter->load($file);
print_r($config);

在 Nette 中使用

$configurator = new Nette\Configurator; 之后将此行添加到您的 app/bootstrap.php 中

$xmlAdapter = new Sallyx\Nette\DI\Config\Adapters\XmlAdapter;
$configurator->addAdapter('xml', $xmlAdapter);

现在,您可以加载 XML 配置文件(与 neon 文件一起)。例如

$configurator->addConfig(__DIR__ . '/config/config.xml', Nette\Config\Configurator::AUTO);

如何将 neon 配置文件转换为 xml 配置文件

require __DIR__ . '/vendor/autoload.php';
use Nette\DI\Config\Adapters\NeonAdapter;
use Sallyx\Nette\DI\Config\Adapters\XmlAdapter;

$na = new NeonAdapter;
$xa = new XmlAdapter;
$config = $na->load('config.neon');
$xmlConfig = $xa->dump($config);
// pretty output
$domxml = new DOMDocument('1.0');
$domxml->preserveWhiteSpace = false;
$domxml->formatOutput = true;
$domxml->loadXML($xmlConfig);
echo $domxml->saveXML();