mtownsend / response-xml
Laravel响应类缺失的XML支持。
Requires
- php: ~7.0|~8.0
- illuminate/container: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/http: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/routing: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- spatie/array-to-xml: ^3.1
Requires (Dev)
- laravel/framework: ~5.5.0|~5.6.0|~5.7.0|~5.8.0|^6.0|^7.0|^8.0|^9.0|^10.0|^11.0
- phpunit/phpunit: ^6.4|^8.5|^9.5|^10.5
README
Laravel响应类缺失的XML支持。
本包旨在与Laravel框架一起使用。
安装
通过composer安装
composer require mtownsend/response-xml
注册服务提供者
对于Laravel 5.4及以下版本,将以下行添加到您的config/app.php
/* * Package Service Providers... */ Mtownsend\ResponseXml\Providers\ResponseXmlServiceProvider::class,
对于Laravel 5.5及以上版本,该包将自动为您注册提供者。
使用Lumen
要注册服务提供者,将以下行添加到app/bootstrap/app.php
$app->register(Mtownsend\ResponseXml\Providers\ResponseXmlServiceProvider::class);
快速开始
以XML响应
$data = [ 'status' => 'success', 'data' => [ 'first_name' => 'John', 'last_name' => 'Smith', ] ]; return response()->xml($data); // Returns: <?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);
方法和参数
响应方法
->xml($xml, $status = 200, array $headers = [], $xmlRoot = 'response', $encoding = null)
$xml
参数是要转换为XML的数据(也可以是预制的XML字符串)。
$status
是响应将发送的HTTP代码。
$headers
是响应将返回的键/值HTTP头部数组。默认头部Content-Type: application/xml
将自动应用,但可以被覆盖。
$xmlRoot
将更改根XML元素。默认为response
。
$encoding
是XML字符集编码声明字符串。默认为null
。
响应方法
->preferredFormat($data, $status = 200, array $headers = [], $xmlRoot = 'response', $encoding = null)
参见->xml()
方法参数。
此方法与->xml()
的区别在于$data
可能被转换为JSON,且如果响应是JSON,则忽略$xmlRoot
。
目的
您是否曾希望Laravel对返回XML响应的支持与对JSON的支持一样出色?想象一下,您正在创建一个API平台,并希望包容那些更喜欢向您的应用程序发送XML请求的其他应用程序——有时原因不仅仅是偏好。如果能够像编写return response()->xml($data);
一样简单地返回XML,并且它就能正常工作,那岂不是梦寐以求?现在您可以实现这一点!
本包实现了一个关键目标:在您的Laravel应用程序中,以与JSON相同的方式轻松地返回XML。
您可能感兴趣的其它包
鸣谢
测试
您可以使用以下命令运行测试
./vendor/bin/phpunit
许可证
MIT许可证(MIT)。有关更多信息,请参阅许可证文件。