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

joelmontpetit's avatar

I'm getting a Target class [is_admin] does not exist error with Laravel 11

I'm making an app to learn Laravel, which will enable me to create Muay Thai combos.

I've added an is_admin option to my combo creations and since then I've been getting the error Target class [is_admin] does not exist.

Items I've checked several times:

Check that the IsAdmin class is correctly defined in the

Spelling and case checking

Registration of middleware in Kernel.php

Use of auth()->user()->is_admin method

Checking routes

I also did php artisan config:cache php artisan cache:clear php artisan route:clear php artisan view:clear

IsAdmin.php:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class IsAdmin
{
    public function handle($request, Closure $next)
    {
        if (!Auth::check() || !Auth::user()->is_admin) {
            return redirect('home');
        }

        return $next($request);
    }
}

Kernel.php:

<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;


class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\TrustHosts::class,
        \App\Http\Middleware\TrustProxies::class,
        \Illuminate\Http\Middleware\HandleCors::class,
        \App\Http\Middleware\PreventRequestsDuringMaintenance::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
    ];

    /**
     * The application's route middleware groups.
     *
     * @var array
     */
    protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            \Illuminate\Session\Middleware\StartSession::class,
            \Illuminate\Session\Middleware\AuthenticateSession::class,
            \Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],

        'api' => [
            'throttle:api',
            \Illuminate\Routing\Middleware\SubstituteBindings::class,
        ],
    ];

    /**
     * The application's route middleware.
     *
     * These middleware may be assigned to groups or used individually.
     *
     * @var array
     */
    protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'is_admin' => \App\Http\Middleware\IsAdmin::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'cache.headers' => \Illuminate\Http\Middleware\SetCacheHeaders::class,
        'can' => \Illuminate\Auth\Middleware\Authorize::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'password.confirm' => \Illuminate\Auth\Middleware\RequirePassword::class,
        'signed' => \Illuminate\Routing\Middleware\ValidateSignature::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
        'verified' => \Illuminate\Auth\Middleware\EnsureEmailIsVerified::class,
    ];
    
}

web.php:

<?php

use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Auth\RegisterController;
use App\Http\Controllers\Auth\ForgotPasswordController;
use App\Http\Controllers\Auth\ResetPasswordController;
use App\Http\Controllers\Auth\VerifyEmailController;
use App\Http\Controllers\Auth\EmailVerificationNotificationController;
use App\Http\Controllers\Auth\EmailVerificationPromptController;
use App\Http\Controllers\ComboController;
use App\Http\Controllers\HomeController;

// General Routes
Route::get('/', function () {
    return view('welcome');
})->name('welcome');

// Authentication Routes
Route::get('login', [LoginController::class, 'showLoginForm'])->name('login');
Route::post('login', [LoginController::class, 'login']);
Route::post('logout', [LoginController::class, 'logout'])->name('logout');

Route::get('register', [RegisterController::class, 'showRegistrationForm'])->name('register');
Route::post('register', [RegisterController::class, 'register']);

Route::get('password/reset', [ForgotPasswordController::class, 'showLinkRequestForm'])->name('password.request');
Route::post('password/email', [ForgotPasswordController::class, 'sendResetLinkEmail'])->name('password.email');
Route::get('password/reset/{token}', [ResetPasswordController::class, 'showResetForm'])->name('password.reset');
Route::post('password/reset', [ResetPasswordController::class, 'reset'])->name('password.update');

Route::get('email/verify', [EmailVerificationPromptController::class, '__invoke'])
    ->middleware('auth')->name('verification.notice');
Route::get('email/verify/{id}/{hash}', [VerifyEmailController::class, '__invoke'])
    ->middleware(['auth', 'signed'])->name('verification.verify');
Route::post('email/resend', [EmailVerificationNotificationController::class, 'store'])
    ->middleware(['auth', 'throttle:6,1'])->name('verification.resend');

// Home Route
Route::get('/home', [HomeController::class, 'index'])->name('home');

// Combo Routes for authenticated users
Route::middleware(['auth'])->group(function () {
    Route::get('combos', [ComboController::class, 'index'])->name('combos.index');
    Route::get('combos/{combo}', [ComboController::class, 'show'])->name('combos.show');

    // Admin routes for managing combos
    Route::middleware(['is_admin'])->group(function () {
        Route::get('admin/combos/create', [ComboController::class, 'create'])->name('admin.combos.create');
        Route::post('admin/combos', [ComboController::class, 'store'])->name('admin.combos.store');
        Route::get('admin/combos', [ComboController::class, 'index'])->name('admin.combos.index');
        Route::get('admin/combos/{combo}/edit', [ComboController::class, 'edit'])->name('admin.combos.edit');
        Route::put('admin/combos/{combo}', [ComboController::class, 'update'])->name('admin.combos.update');
        Route::delete('admin/combos/{combo}', [ComboController::class, 'destroy'])->name('admin.combos.destroy');
    });
});

// Auth routes
Auth::routes();

ComboController.php:

<?php

// app/Http/Controllers/ComboController.php

namespace App\Http\Controllers;

use App\Models\Combo;
use App\Models\Strike;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;


class ComboController extends Controller
{
    public function index()
    {
        $combos = Combo::where('is_public', true)->get();
        return view('combos.index', compact('combos'));
    }

    public function create()
    {
        if (auth()->user()->is_admin) {
            return view('admin.combos.create');
        }
        return view('combos.create');
    }

If anyone could help me it would be greatly appreciated.
    public function store(Request $request)
    {
        try {
            $request->validate([
                'name' => 'required|string|max:255',
                'description' => 'required|string',
                'level' => 'required|in:Beginner,Intermediate,Advanced',
            ]);

            $comboData = $request->only(['name', 'description', 'level']);
            $comboData['user_id'] = auth()->id();

            if (auth()->user()->is_admin && $request->has('is_public')) {
                $comboData['is_public'] = $request->boolean('is_public');
            }

            $combo = Combo::create($comboData);

            foreach ($request->input('strikes', []) as $strikeName) {
                Strike::create([
                    'name' => $strikeName,
                    'combo_id' => $combo->id,
                ]);
            }

            return redirect()->route('combos.index');
        } catch (\Exception $e) {
            Log::error('Error creating combo: ' . $e->getMessage());
            return redirect()->back()->with('error', 'An error occurred while creating the combo.');
        }
    }

    public function show(Combo $combo)
    {
        return view('combos.show', compact('combo'));
    }

    public function edit(Combo $combo)
    {
        if (auth()->user()->is_admin) {
            return view('admin.combos.edit', compact('combo'));
        }
        return view('combos.edit', compact('combo'));
    }

    public function update(Request $request, Combo $combo)
    {
        $request->validate([
            'name' => 'required|string|max:255',
            'description' => 'required|string',
            'level' => 'required|in:Beginner,Intermediate,Advanced',
        ]);

        $comboData = $request->only(['name', 'description', 'level']);

        if (auth()->user()->is_admin && $request->has('is_public')) {
            $comboData['is_public'] = $request->boolean('is_public');
        }

        $combo->update($comboData);

        $combo->strikes()->delete();
        foreach ($request->input('strikes', []) as $strikeName) {
            Strike::create([
                'name' => $strikeName,
                'combo_id' => $combo->id,
            ]);
        }

        return redirect()->route('combos.index');
    }

    public function destroy(Combo $combo)
    {
        $combo->delete();
        return redirect()->route('combos.index');
    }
}

0 likes
3 replies
Kortez12's avatar

In Laravel 11 there are no Kernel.php files left. You are not using the latest Laravel version, from Kernel.php file I can see, that this is from Laravel 9. If you are indeed using Laravel 11, try in the Kernel.php file to change $routeMiddleware to $middlewareAliases and the problem may be solved.

1 like
Ahmed-Hany-Aou's avatar

@Kortez12 you saved my life thanks i had the same issue and I was using Laravel 11 the solution was to remove the kernel.php and register the middleware aliases in bootstrap/app.php

1 like
Devio's avatar

in laravel 11

/bootsrap/app.php

use App\Http\Middleware\IsAdmin;

...

->withMiddleware(function (Middleware $middleware) {
        $middleware->alias([
            'admin' => IsAdmin::class,
        ]);
    })

Then apply it to your route as you have done.

Also this is no longer needed in the controller as you can only access this route as an admin

 public function create()
    {
        //if (auth()->user()->is_admin) {
       //     return view('admin.combos.create');
        //}
        //return view('combos.create');

return view('admin.combos.create');
    }

Please or to participate in this conversation.