michelmelo/response-xml

此包最新版本(1.1.3)没有可用的许可信息。

缺少对Laravel响应类XML支持的缺失。

1.1.3 2019-12-03 20:19 UTC

This package is auto-updated.

Last update: 2024-09-06 20:47:40 UTC


README

缺少对Laravel响应类XML支持的缺失。

此包旨在与Laravel框架一起使用。

安装

通过composer安装

composer require michelmelo/response-xml

注册服务提供者

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

/*
 * Package Service Providers...
 */
MichelMelo\ResponseXml\Providers\ResponseXmlServiceProvider::class,

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

使用Lumen

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

$app->register(MichelMelo\ResponseXml\Providers\ResponseXmlServiceProvider::class);

快速入门

以XML响应

$data = [
    'status' => 'success',
    'data' => [
        'first_name' => 'John',
        'last_name' => 'Smith',
    ]
];
return response()->xml($data);

返回

<?xml version="1.0"?>
<response>
    <status>success</status>
    <data>
        <first_name>John</first_name>
        <last_name>Smith</last_name>
    </data>
</response>

从集合或Eloquent查询以XML响应

您还可以传递一个要转换成XML的集合。

return response()->xml(User::all());

以现有XML响应

如果您已经有了XML,您可以将它传递给xml方法来响应。

$xml = <<<XML
<?xml version="1.0"?>
<response>
    <status>success</status>
    <data>
        <first_name>John</first_name>
        <last_name>Smith</last_name>
    </data>
</response>
XML;
return response()->xml($xml);

以请求的首选格式(XML/JSON)响应

如果您想在不编写if/else语句的情况下即时响应XML或JSON,可以使用->preferredFormat()方法。这将获取请求的Accept头并尝试确定请求想以哪种格式提供服务。如果此头不存在,则默认为JSON。注意:使用此方法时,它将自动将响应的Content-Type头设置为与请求的Accept头匹配。

$data = [
    'status' => 'success',
    'data' => [
        'first_name' => 'John',
        'last_name' => 'Smith',
    ]
];
return response()->preferredFormat($data);

添加属性

您可以使用名为_attributes的键向节点添加属性,并使用_value来指定值。

$array = [
    'Good guy' => [
        '_attributes' => ['attr1' => 'value'],
        'name' => 'Luke Skywalker',
        'weapon' => 'Lightsaber'
    ],
    'Bad guy' => [
        'name' => 'Sauron',
        'weapon' => 'Evil Eye'
    ],
    'The survivor' => [
        '_attributes' => ['house'=>'Hogwarts'],
        '_value' => 'Harry Potter'
    ]
];

return response()->preferredForma($array);

此代码将产生

<?xml version="1.0"?>
<root>
    <Good_guy attr1="value">
        <name>Luke Skywalker</name>
        <weapon>Lightsaber</weapon>
    </Good_guy>
    <Bad_guy>
        <name>Sauron</name>
        <weapon>Evil Eye</weapon>
    </Bad_guy>
    <The_survivor house="Hogwarts">
        Harry Potter
    </The_survivor>
</root>

使用保留字符

您还可以将节点值包裹在CDATA部分中。这允许您使用保留字符。

$array = [
    'Good guy' => [
        'name' => [
            '_cdata' => '<h1>Luke Skywalker</h1>'
        ],
        'weapon' => 'Lightsaber'
    ],
    'Bad guy' => [
        'name' => '<h1>Sauron</h1>',
        'weapon' => 'Evil Eye'
    ]
];

return response()->preferredForma($array);

此代码将产生

<?xml version="1.0"?>
<root>
    <Good_guy>
        <name><![CDATA[<h1>Luke Skywalker</h1>]]></name>
        <weapon>Lightsaber</weapon>
    </Good_guy>
    <Bad_guy>
        <name>&lt;h1&gt;Sauron&lt;/h1&gt;</name>
        <weapon>Evil Eye</weapon>
    </Bad_guy>
</root>

方法和参数

响应方法

->xml($xml, $status = 200, array $headers = [], $xmlRoot = 'response')

$xml参数是要转换成XML的数据(也可以是预先准备好的XML字符串)。

$status是响应将发送的HTTP状态码。

$headers是响应将返回的键/值HTTP头数组。

$xmlRoot将更改根XML元素。默认为response

响应方法

->preferredFormat($data, $status = 200, array $headers = [], $xmlRoot = 'response')

参见->xml()方法参数。

此方法和->xml()的唯一区别在于$data可能被转换成JSON,如果响应是JSON,则忽略$xmlRoot

目的

您是否曾希望Laravel在返回XML响应方面提供与JSON相同的优秀支持?想象一下,您正在创建一个API平台,并希望包含其他更喜欢以XML请求您的应用程序的应用程序——有时原因不仅仅是偏好。如果能够像这样简单地返回XML,即return response()->xml($data);并且它就能正常工作,那岂不是梦寐以求?现在您做到了!

此包实现了一个关键目标:在您的Laravel应用程序中以与JSON相同的方式轻松地返回XML。

##更多

https://github.com/spatie/array-to-xml

鸣谢

许可

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