bmatovu / laravel-xml
Laravel XML 支持
v4.0.0
2024-04-16 08:19 UTC
Requires
- php: ^8.1
- illuminate/database: ^10.0|^11.0
- illuminate/http: ^10.0|^11.0
- illuminate/support: ^10.0|^11.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.14
- laravel/framework: ^10.0|^11.0
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^9.0|^10.0|^11.0
README
此软件包为您Laravel项目提供了备受期待的XML支持。
支持: Laravel版本v5.3及以上
安装
composer require bmatovu/laravel-xml
请求
获取请求内容(主体)。
$request->xml();
* 返回 Bmatovu\LaravelXml\Support\XMLElement
对象。
确定请求内容类型是否为XML。
$request->sentXml();
确定当前请求是否接受XML。
$request->wantsXml();
验证XML内容
$isValid = Xml::is_valid($request->xml()); if (! $isValid) { return response()->xml(['message' => 'The given data was malformed.'], 400); }
验证 - 对XML模式定义进行验证
$errors = Xml::validate($request->xml(), 'path_to/sample.xsd'); if ($errors) { return response()->xml([ 'message' => 'The given data was invalid.', 'errors' => $errors, ], 422); }
响应
Route::get('/users/{user}', function (Request $request, int $userId) { $user = User::findOrFail($userId); return response()->xml($user); });
<?xml version="1.0" encoding="UTF-8"?> <document> <id>1</id> <name>jdoe</name> <email>jdoe@example.com</email> </document>
Route::get('/users/{user}', function (Request $request, int $userId) { $user = User::findOrFail($userId); return response()->xml(['user' => $user->toArray()]); });
<?xml version="1.0" encoding="UTF-8"?> <document> <user> <id>1</id> <name>jdoe</name> <email>jdoe@example.com</email> </user> </document>
Route::get('/users/{user}', function (Request $request, int $userId) { $user = User::findOrFail($userId); return response()->xml($user, 200, [], ['root' => 'user']); });
<?xml version="1.0" encoding="UTF-8"?> <user> <id>1</id> <name>jdoe</name> <email>jdoe@example.com</email> </user>
Route::get('/users', function () { $users = User::get(); 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> </users> <users> <id>2</id> <name>Gary Plant</name> <email>gplant@example.com</email> </users> </document>
并将内容类型自动设置为xml
内容类型 → text/xml; charset=UTF-8
中间件
首先在 app\Http\Kernel.php
中注册中间件
protected $routeMiddleware = [ // ... 'xml' => \Bmatovu\LaravelXml\Http\Middleware\RequireXml::class, ];
然后在您的路由或控制器中使用该中间件。
Route::post('/users', function (Request, $request) { // do something... })->middleware('xml');
默认情况下,此中间件仅检查 Content-Type
;
[415
- 不支持的媒体类型]
<?xml version="1.0" encoding="UTF-8"?> <document> <message>Only accepting content of type XML.</message> </document>
要检查传递的内容是否为有效的XML,请向中间件传递一个布尔值
Route::post('/users', function (Request, $request) { // do something... })->middleware('xml:1');
[400
- 错误请求]
<?xml version="1.0" encoding="UTF-8"?> <document> <message>The given data was malformed.</message> </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上分支软件包并提交拉取请求!