Downloads
Stars
Version
This package comes with the much desired xml support for you Laravel project.
Supports: Laravel versions v5.3 and above
composer require bmatovu/laravel-xml
Get the request content (body).
$request->xml();
* Returns Bmatovu\LaravelXml\Support\XMLElement
object.
Determine if the request content type is XML.
$request->sentXml();
Determine if the current request is accepting XML.
$request->wantsXml();
Validate XML content
$isValid = Xml::is_valid($request->xml());
if (! $isValid) {
return response()->xml(['message' => 'The given data was malformed.'], 400);
}
Validation - Against XML Schema Definition
$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>[email protected]</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>[email protected]</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>[email protected]</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>[email protected]</email>
</users>
<users>
<id>2</id>
<name>Gary Plant</name>
<email>[email protected]</email>
</users>
</document>
And will automatically set the content type to xml
Content-Type → text/xml; charset=UTF-8
First register the middleware in app\Http\Kernel.php
protected $routeMiddleware = [
// ...
'xml' => \Bmatovu\LaravelXml\Http\Middleware\RequireXml::class,
];
Then use the middleware on your routes, or in the controllers.
Route::post('/users', function (Request, $request) {
// do something...
})->middleware('xml');
This middleware only checks the Content-Type
by defaul;
[415
- Unsupported Media Type]
<?xml version="1.0" encoding="UTF-8"?>
<document>
<message>Only accepting content of type XML.</message>
</document>
To check is the passed content is valid XML, pass a bool to the middleware
Route::post('/users', function (Request, $request) {
// do something...
})->middleware('xml:1');
[400
- Bad Request]
<?xml version="1.0" encoding="UTF-8"?>
<document>
<message>The given data was malformed.</message>
</document>
Encode: Array to Xml
Xml::encode(['key' => 'value']);
Or
xml_encode(['key' => 'value']);
Decode: Xml to Array
Xml::decode('<?xml version="1.0" encoding="UTF-8"?><document><key>value</key></document>');
Or
xml_decode('<?xml version="1.0" encoding="UTF-8"?><document><key>value</key></document>');
Under the hood, I'm using;
Spatie's array to XML convernsion
Hakre's XML to JSON conversion
If you've stumbled across a bug, please help us by leaving as much information about the bug as possible, e.g.
This will help us to fix the bug as quickly as possible, and if you do wish to fix it yourself; feel free to fork the package on GitHub and submit a pull request!