michelmelo / response-xml
缺少对Laravel响应类XML支持的缺失。
Requires
- php: ~7.0
- illuminate/container: ^5.2
- illuminate/http: ^5.2
- illuminate/routing: ^5.2
- illuminate/support: ^5.3
- spatie/array-to-xml: ^2.6
Requires (Dev)
- laravel/framework: ^5.0
- phpunit/phpunit: ^6.4
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><h1>Sauron</h1></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
鸣谢
- Mark Townsend
- Spatie
- 所有贡献者
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。