bmatovu/laravel-xml

Laravel XML 支持

v4.0.0 2024-04-16 08:19 UTC

README

Total Downloads Latest Stable Version License Quality Coverage Unit Tests Documentation

此软件包为您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>');

致谢

底层,我使用了;

Spatie的数组到XML转换

Hakre的XML到JSON转换

Akande的XML验证

报告错误

如果您发现了错误,请尽可能提供有关错误的信息,例如:

  • 重现步骤
  • 预期结果
  • 实际结果

这将帮助我们尽快修复错误,如果您愿意自己修复它,请随意在GitHub上分支软件包并提交拉取请求!