vmporcayom / laravel-xml
支持 Laravel XML 的 Tramite 标签
v3.0.0
2020-09-13 09:12 UTC
Requires
- php: ^7.2.5
- illuminate/database: ^7.0|^8.0
- illuminate/http: ^7.0|^8.0
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ^5.0|^6.0
- phpunit/phpunit: ^8.4|^9.0
README
此包为您的 Laravel 项目提供了所需的所有 xml 支持,包括仅接受 xml 请求的中介件、http 响应以 xml 格式,以及 xml 转换和验证的更多实用工具。
支持: Laravel 版本 v5.3 及以上
安装
$ composer require bmatovu/laravel-xml
请求
获取请求内容(主体)。
$request->xml();
* 返回 Bmatovu\LaravelXml\Support\XMLElement
对象。
确定请求内容类型是否为 XML。
$request->isXml();
确定当前请求是否接受 XML。
$request->wantsXml();
验证 XML 内容
Xml::is_valid($request->xml());
验证 - 与 XML 模式定义(XSD)进行验证
$errors = Xml::validate($request->xml(), 'path_to/sample.xsd'); if ($errors) { return response()->xml(['error' => $errors], 422); }
响应
期望一个数组,将您的对象转换为数组...
Route::get('/users', function () { $users = App\User::all(); return response()->xml(['users' => $users->toArray()]); });
上述代码片段的示例响应
<?xml version="1.0" encoding="UTF-8"?> <document> <users> <id>1</id> <name>John Doe</name> <email>jdoe@example.com</email> <created_at>2018-07-12 17:06:13</created_at> <updated_at>2018-07-12 18:00:05</updated_at> </users> <users> <id>2</id> <name>Gary Plant</name> <email>gplant@example.com</email> <created_at>2018-07-12 18:02:26</created_at> <updated_at>2018-07-13 11:22:44</updated_at> </users> </document>
并将自动设置内容类型为 xml
Content-Type → text/xml; charset=UTF-8
中介件
首先在 app\Http\Kernel.php
中注册中介件
protected $routeMiddleware = [ // ... 'xml' => \Bmatovu\LaravelXml\Http\Middleware\RequireXml::class, ];
然后在您的路由或控制器中使用中介件。
Route::post('/user/store', function (Request, $request) { // do something... })->middleware('xml');
如果请求的 content-type
不是 xml,则响应将为;
[415
- 不支持的媒体类型]
<?xml version="1.0" encoding="UTF-8"?> <document> <error>Only accepting xml content</error> </document>
实用工具
编码:数组转 XML
Xml::encode(['key' => 'value']);
或
xml_encode(['key' => 'value']);
解码:XML 转 数组
Xml::decode('<?xml version="1.0" encoding="UTF-8"?><document><key>value</key></document>');
或
xml_decode('<?xml version="1.0" encoding="UTF-8"?><document><key>value</key></document>');
鸣谢
底层使用以下工具;
报告错误
如果您发现了错误,请尽可能提供有关错误的详细信息,例如。
- 重现步骤
- 预期结果
- 实际结果
这将帮助我们尽快修复错误,如果您愿意自行修复;请自由地在 GitHub 上分支包并提交拉取请求!