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

StarShines's avatar

Controller Class doesn't exist error

Hello,

I have AdminController and SupervisorController in Controllers folder. And I am still receiving class doesn;t exist error. Also, I am not able to log in with both users. It returns the dashboard page with 404 Not Found

My code snippets are given below:

AdminController

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Models\User;

class AdminController extends Controller
{
    public function admindashboard()
    {
        return view('admin.index');
    }
    public function destroy(Request $request)
    {
        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/login');
    }
    public function profile()
    {
        $id = Auth::user()->id;
        $adminData = User::find($id);
        return view('admin.admin_profile_view', compact('adminData'));
    }
}

SupervisorController

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class SupervisorController extends Controller
{
    public function supervisordashboard()
    {
        return view('supervisor.supervisor_dashboard');
    }

    public function destroy(Request $request)
    {
        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/login');
    }
}

Routes:

// Admin Routes
Route::controller('AdminController::class')->middleware(['auth', 'role:Admin'])->prefix('admin')->group(function () {
    Route::get('/dashboard', 'admindashboard')->name('admin.dashboard');
    Route::get('/logout', 'destroy')->name('admin.logout');
    Route::get('/profile', 'profile')->name('admin.profile');
});

//Supervisor Routes
Route::controller('SupervisorController::class')->middleware(['auth', 'role:Supervisor'])->prefix('supervisor')->group(function () {
    Route::get('/dashboard', 'supervisordashboard');
    Route::get('/logout', 'destroy');
});

RoleMiddleware:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure(\Illuminate\Http\Request): (\Illuminate\Http\Response|\Illuminate\Http\RedirectResponse)  $next
     * @return \Illuminate\Http\Response|\Illuminate\Http\RedirectResponse
     */
    public function handle(Request $request, Closure $next, $role)
    {

        if ($request->user()->role !== $role ) {
            return redirect('/');
        }
        return $next($request);
    }
}

AuthenticatedSessionController

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Http\Requests\Auth\LoginRequest;
use App\Providers\RouteServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class AuthenticatedSessionController extends Controller
{
    /**
     * Display the login view.
     *
     * @return \Illuminate\View\View
     */
    public function create()
    {
        return view('auth.login');
    }

    /**
     * Handle an incoming authentication request.
     *
     * @param  \App\Http\Requests\Auth\LoginRequest  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function store(LoginRequest $request)
    {
        $request->authenticate();

        $request->session()->regenerate();

        $url = '';
        if ($request->user()->role === 'Admin') {
            $url = 'admin/dashboard';
        } elseif ($request->user()->role === 'Supervisor') {
            $url = 'supervisor/dashboard';
        } elseif ($request->user()->role === 'Accountant') {
            $url = 'accountant/dashboard';
        }

        return redirect()->intended($url);
    }

    /**
     * Destroy an authenticated session.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function destroy(Request $request)
    {
        Auth::guard('web')->logout();

        $request->session()->invalidate();

        $request->session()->regenerateToken();

        return redirect('/');
    }
}

Your help in this regard is highly appreciated.

0 likes
14 replies
Sinnbeck's avatar
Sinnbeck
Best Answer
Level 102

You need to actually import the classes in routes

So use it at the top, and remove quotes

use App\Http\Controllers\AdminController;

Route::controller(AdminController::class)
1 like
StarShines's avatar

@Sinnbeck

Hello, its still the same, I am getting 404 not found.

Routes

// Admin Routes
Route::middleware(['auth', 'role:Admin'])->prefix('admin')->group(function () {
    Route::get('/dashboard', [AdminController::class,  'admindashboard'])->name('admin.dashboard');
    Route::get('/logout', ['AdminController::class, destroy'])->name('admin.logout');
    Route::get('/profile', ['AdminController::class, profile'])->name('admin.profile');
});

//Supervisor Routes
Route::middleware(['auth', 'role:Supervisor'])->prefix('supervisor')->group(function () {
    Route::get('/dashboard', ['SupervisorController::class, supervisordashboard']);
    Route::get('/logout', ['SupervisorController::class, destroy']);
});

Minhazul18's avatar

You need to Call your Controller in your route file. Like this:

//Controller name use App\Http\Controllers\AdminController; //Route name Route::controller(AdminController::class)

StarShines's avatar

Yes I am doing that, still not working.

Route:

use App\Http\Controllers\ProfileController;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AdminController;
use App\Http\Controllers\SupervisorController;
StarShines's avatar

It is not giving any error, but simply returning 404 not found on login.

Sinnbeck's avatar

@shunmas ah I focused on the actual error in the code. Didn't catch it was two completely unrelated issues merged into one post

So what page do you end on when you get 404?

StarShines's avatar

When I am on login page, and I enter the login details of Admin or Supervisor, it redirects to /dashboard and the page shows 404 Not Found.

StarShines's avatar

yes, according to routes: 'admin/dashboard is for admin. So When the admin logs in, he should be redirected to this dashboard and same for supervisor, it should be supervisor/dashboard.

I have used the below code in AuthenticatedSessionController:

public function store(LoginRequest $request)
    {
        $request->authenticate();

        $request->session()->regenerate();

        $url = '';
        if ($request->user()->role === 'Admin') {
            $url = 'admin/dashboard';
        } elseif ($request->user()->role === 'Supervisor') {
            $url = 'supervisor/dashboard';
      
        }

        return redirect()->intended($url);
    }
StarShines's avatar

Hi Sinnbeck,

I stopped the server, restarted it and now its working . Sometimes, its shows strange behaviour.

Anyway, I have a followup question, in the routes:

Its repeating the class AdminController Class. Is there a way, where I use the middleware and prefix together.

Currently I have this:

Route::middleware(['auth', 'role:Admin'])->group(function () {
    Route::get('admin/dashboard', [AdminController::class,  'admindashboard'])->name('admin.dashboard');

Many thanks

Cheers!

Sinnbeck's avatar

@shunmas please keep one thread for each question. Otherwise it will be very hard to keep track of what the best answer is actually answering. So far we have 3 questions going.

Anyways, just add it to the group (or put the group in a group)

Route::middleware(['auth', 'role:Admin'])->prefix('admin')->group(function () {
Sinnbeck's avatar

@shunmas no worries. You are still relatively new here :)

Please mark a best answer if you feel the original question has been answered

Please or to participate in this conversation.