A Laravel Middleware to accept XML requests
composer require tucker-eric/laravel-xml-middleware In config/app.php add the service provider to the providers array:
'providers' => [ //Other Service Providers XmlMiddleware\XmlRequestServiceProvider::class, ];In app/Http/Kernel.php
protected $routeMiddleware = [ /// Other Middleware 'xml' => \XmlMiddleware\XmlRequestMiddleware::class, ];Add the middleware to your route as desired
class MyController extends Controller { public function __construct() { $this->middleware('xml'); } } Route::group(['middleware' => 'xml'], function() { Route::post('my-api-endpoint', 'MyOtherController@store'); }); Route::post('my-api-endpoint', 'MyOtherController@store')->middleware('xml');If you are using the middleware it will automatically inject the xml into the request as an array and you you can access the xml data in your controller with the $request->all():
use Illuminate\Http\Request; use App\Http\Controllers\Controller; class MyController extends Controller { public function __construct() { $this->middleware('xml'); } public function store(Request $request) { $request->all(); } }To access the xml input without the middleware use the xml() method on the Request:
use Illuminate\Http\Request; use App\Http\Controllers\Controller; Class MyOtherController extends Controller { public function store(Request $request) { $xml = $request->xml(); } }To access the xml request as an object pass false to the xml() method:
use Illuminate\Http\Request; use App\Http\Controllers\Controller; Class MyOtherController extends Controller { public function store(Request $request) { $xml = $request->xml(false); } }