bagart / collection-xml

Laravel Collection 类缺少的 XML 支持。

1.4.0.2 2022-02-09 02:19 UTC

This package is not auto-updated.

Last update: 2024-09-18 14:46:11 UTC


README

  • 添加 PHP8/Laravel8 支持

Laravel Collection 类缺少的 XML 支持。

本包旨在与 Laravel 框架协同工作。

安装

通过 composer 安装

composer require mtownsend/collection-xml

注册服务提供者

对于 Laravel 5.4 及以下版本,将以下行添加到您的 config/app.php

/*
 * Package Service Providers...
 */
Mtownsend\CollectionXml\Providers\CollectionXmlServiceProvider::class,

对于 Laravel 5.5 及以上版本,包会自动为您注册提供者。

使用 Lumen

要注册服务提供者,将以下行添加到 app/bootstrap/app.php

$app->register(Mtownsend\CollectionXml\Providers\CollectionXmlServiceProvider::class);

快速入门

将集合转换为 xml

将 Laravel 集合内部的数据转换为有效的 XML

$collection = collect([
    'carrier' => 'fedex',
    'id' => 123,
    'tracking_number' => '9205590164917312751089',
]);

$xml = $collection->toXml();

// Returns
<?xml version="1.0"?>
<root>
    <carrier>fedex</carrier>
    <id>123</id>
    <tracking_number>9205590164917312751089</tracking_number>
</root>

将集合转换为 SOAP xml

请注意,此方法是本包中最容易出问题的一部分。请仔细检查您的 SOAP 端点和要求,以获得最佳使用效果。

$collection = collect([
    'carrier' => 'fedex',
    'id' => 123,
    'tracking_number' => '9205590164917312751089',
]);

$xml = $collection->toSoapXml('request', 'xmlBody', 'https://yourwebserver/service.asmx?wsdl');

// Returns
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="https://yourwebserver/service.asmx?wsdl">
    <SOAP-ENV:Body>
        <ns1:ProcessXMLRequest>
            <ns1:xmlBody>
                <?xml version="1.0"?>
                <request>
                    <carrier>fedex</carrier>
                    <id>123</id>
                    <tracking_number>9205590164917312751089</tracking_number>
                </request>
            </ns1:xmlBody>
        </ns1:ProcessXMLRequest>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

请注意:当构建 SOAP xml 时,SoapFactory 类会ping $fullUrl 来检查其是否有效。它不会触发 API 交互,但如果您的 URL 无效,您将遇到异常。

数组转换为 xml

在不使用集合的情况下将数组转换为 xml

$array = [
    'carrier' => 'fedex',
    'id' => 123,
    'tracking_number' => '9205590164917312751089',
];

$xml = array_to_xml($array);

辅助函数、方法和参数

辅助函数

array_to_xml($array, $root = '')

$root 参数允许您自定义根 XML 元素。默认为 <root>

集合方法

->toXml($root)

参见上方的 array_to_xml()

集合方法

->toSoapXml($root = '', $soapRoot = '', $fullUrl, array $options = [])

$root 参数允许您自定义内部根 XML 元素。默认为 <root>

$soapRoot 是外部 XML 根元素。默认为 xmlBody

$fullUrl 将是完全限定的 SOAP 端点,例如 https://yourwebserver/service.asmx?wsdl请注意:当构建 SOAP xml 时,SoapFactory 类会ping $fullUrl 来检查其是否有效。它不会触发 API 交互,但如果您的 URL 无效,您将遇到异常。

$options 将是 PHP 的 SoapClient 类的有效选项数组。默认设置为 ['trace' => 1]

用途

Laravel 始终偏好于 JSON 而不是 XML 的 API 结构。不可避免地,开发者将需要与需要 XML 的文件或 API 进行交互,并且他们经常不得不自己解决这些问题。

本包旨在为 Laravel 的 Collection 类提供无痛苦的 XML 支持,并附带一些有用的辅助函数。

您可能感兴趣的其它包

鸣谢

测试

您可以使用以下命令运行测试

./vendor/bin/phpunit

许可证

MIT 许可证 (MIT)。有关更多信息,请参阅 许可证文件