Home > Net >  Laravel Routing "Route [dashboard] not defined?
Laravel Routing "Route [dashboard] not defined?

Time:07-04

I'm trying to config an user/admin environment in my laravel page, and whenever I try group the routes, I'll get one of the mentioned error back. What am I doing wrong? I tried both formats, same error.

web.php

//supposed user dashboard
Route::group(['middleware' => ['auth', 'user']], function () {
    Route::get('/dashboard', 'DashboardController@index')->name('dashboard');
});

//supposed admin dashboard
Route::group(['middleware' => ['auth', 'admin']], function () {
    Route::get('/dashboard', [AdminDashController::class, 'index']);
});

eg AdminDashController:

public function index()
    {
        return view("admin_dashboard");
    }

DashboardController does the same, but returning user view.

I'm new to laravel, I appriciate any help!

Update:

I tried the solution below, my result is that I'm now getting "Route [user.dashboard] not defined." error...

My web.php

Route::group(['middleware' => ['auth', 'user']], function () {
    Route::get('/dashboard', [UserDashController::class, 'index'])->name('user.dashboard');
});

// admin dashboard
Route::group(['middleware' => ['auth', 'admin']], function () {
    Route::get('/dashboard', [AdminDashController::class, 'index'])->name('admin.dashboard');
});

my AdminDashController and UserDashController:

 public function index()
    {
        return view('user_dashboard');
    }

AND

 public function index()
    {
        return view('admin_dashboard');
    }

I have a RedirectIfAuthenticated.php

public function handle(Request $request, Closure $next, ...$guards)
    {
        $guards = empty($guards) ? [null] : $guards;

        foreach ($guards as $guard) {
            if (Auth::guard($guard)->check()) {
                /** @var User $user */
                $user = Auth::guard($guard);

                // to admin dashboard
                if ($user->hasRole('admin')) {
                    return redirect()->route('admin.dashboard');
                }

                // to user dashboard
                else if ($user->hasRole('user')) {
                    return redirect(route('user.dashboard'));
                }
            }
        }

        return $next($request);
    }

Also having an Admin and User redirect: AdminAuthenticated.php:

public function handle(Request $request, Closure $next)
    {
        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is not admin take him to his dashboard
            if ( $user->hasRole('user') ) {
                return redirect()->route('user.dashboard');
            }

            // allow admin to proceed with request
            else if ( $user->hasRole('admin') ) {
                return $next($request);
            }
        }

        abort(403);  // permission denied error
    }

UserAuthenticated

 public function handle(Request $request, Closure $next)
    {

        if( Auth::check() )
        {
            /** @var User $user */
            $user = Auth::user();

            // if user is admin take him to his dashboard
            if ( $user->hasRole('admin') ) {
                return redirect(route('admin.dashboard'));
            }

            // allow user to proceed with request
            else if ( $user->hasRole('user') ) {
                return $next($request);
            }
        }

        abort(403);  // permission denied error

    }

Update 2:

I replaced the routing in web.php as follows:

Route::middleware(['auth','user'])->group(function () {
    Route::prefix('user')->group(function () {
      Route::get('/dashboard', [UserDashController::class, 'index'])->name('user.dashboard');
    });
});



Route::middleware(['auth','admin'])->group(function () {
    Route::prefix('admin')->group(function () {
      Route::get('/dashboard', [AdminDashController::class, 'index'])->name('admin.dashboard');
    });
});

Still same error: "Route [user.dashboard] not defined."

CodePudding user response:

The problem may be in your route name. One route has a named dashboard another was not. Use the below code hope this will resolve your problem

// user dashboard
Route::group(['middleware' => ['auth', 'user']], function () {
    Route::get('/dashboard', 'DashboardController@index')->name('user.dashboard');
});

// admin dashboard
Route::group(['middleware' => ['auth', 'admin']], function () {
    Route::get('/dashboard', 'DashboardController@index')->name('admin.dashboard);
})

use the route name in stead of url.

CodePudding user response:

in my case, instead using your code below :

Route::group(['middleware' => ['auth', 'user']], function () {
    Route::get('/dashboard', [UserDashController::class, 'index'])->name('user.dashboard');
});

// admin dashboard
Route::group(['middleware' => ['auth', 'admin']], function () {
       Route::get('/dashboard', [AdminDashController::class, 'index'])->name('user.dashboard');

});

i use my own code, so define the middleware first and use prefix on it :

Route::middleware(['auth','user'])->group(function () {
    Route::prefix('user')->group(function () {
      Route::get('/dashboard', [UserDashController::class, 'index'])->name('user.dashboard');


    });
});



Route::middleware(['auth','admin'])->group(function () {
    Route::prefix('admin')->group(function () {
      Route::get('/dashboard', [AdminDashController::class, 'index'])->name('admin.dashboard');

    });
});

maybe you should differentiate routing between dashboard for admin and user. you can use like this : /admin/dashboard and /user/dashboard

edit : i think there's some typo on your code :

 // to admin dashboard
            if ($user->hasRole('admin')) {
                return redirect(route('admin.dashboard'));
            }

return redirect route should typed like this : return redirect()->route('admin.dashboard)

  • Related