Be part of JetBrains PHPverse 2026 on June 9 – a free online event bringing PHP devs worldwide together.

murilo's avatar
Level 10

middleware in laravel 11 , inside the controller

hello , I used to do like this in my controller , in laravel 10 -

class Controller extends BaseController
{

    use AuthorizesRequests, ValidatesRequests;
    protected $user;
    /**
     *
     */
    public function __construct()
    {

          $this->middleware(function ($request, $next) {
            $this->user   = Auth::user();
            return $next($request);
        });
    }
}

I tryed this in laravel 11 -

use Illuminate\Support\Facades\Auth;

abstract class Controller
{
    protected $user;

    /**
     *
     */
    public function __construct()
    {

        $this->middleware(function ($request, $next) {
            $this->user   = Auth::user();
            return $next($request);
        });
    }
}

it gave this error -

{
    "message": "Call to undefined method App\Http\Controllers\Admin\UserPub\UserController::middleware()",
    "exception": "Error",
    "file": "/var/www/html/app/Http/Controllers/Controller.php",
    "line": 16,
    "trace": [
0 likes
3 replies
LaryAI's avatar
Level 58

It looks like the issue you're encountering is due to the fact that the Controller class in Laravel 11 might not be extending the base controller class that provides the middleware method. In Laravel, the base controller class is typically Illuminate\Routing\Controller.

To resolve this issue, ensure that your controller extends Illuminate\Routing\Controller or App\Http\Controllers\Controller if you have a custom base controller. Here is an updated version of your code:

use Illuminate\Support\Facades\Auth;
use Illuminate\Routing\Controller as BaseController; // Ensure you are extending the correct base controller

abstract class Controller extends BaseController
{
    protected $user;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user();
            return $next($request);
        });
    }
}

If you have a custom base controller in App\Http\Controllers\Controller, make sure it extends Illuminate\Routing\Controller:

namespace App\Http\Controllers;

use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

Then, your custom controller should extend this base controller:

use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller as BaseController;

abstract class Controller extends BaseController
{
    protected $user;

    /**
     * Constructor
     */
    public function __construct()
    {
        $this->middleware(function ($request, $next) {
            $this->user = Auth::user();
            return $next($request);
        });
    }
}

By ensuring that your controller extends the correct base controller, you should be able to use the middleware method without encountering the "Call to undefined method" error.

Please or to participate in this conversation.