Laravel 5 - Remove Parameter From All Request Objects at Controller Level

laravel, laravel-5

Solution

Perhaps you want global middleware?

First arrange for the middleware to run on all routes:

// routes.php
$app->middleware([
    App\Http\Middleware\Apitoken::class
]);

Then define what the middleware should do:

// src/App/Http/Middleware/Apitoken.php
<?php
namespace App\Http\Middleware;

use Closure;

class Apitoken
{
    public function handle($request, Closure $next)
    {
        unset($request['api_token']);

        return $next($request);
    }
}

Problem

I have URLs that look like: ``` http://example.com/api/user?id=45&name=mike&api_token=2348283 http://example.com/api/project?id=5&description=first&api_token=2348283 etc... ``` In my controllers, I have functions that look like: ``` public function user_get_endpoint(Request $request){ $request = $request->toArray(); return UserModel::where($request)->get()->toArray(); } ``` The above will currently break since the `$request` object contains a property called `api_token` which does not exist in the `user` table. I am using the `api_token` in a middleware to check for authentication. I can manually unset the `api_token` property in each of my API functions by using `unset($request['api_token']`, but I'd like to avoid that if possible. Is there anyway to do this application wide or at a class or controller level?

Original source