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); } }