Laravel 5.4 routing for same prefix group but different middleware giving error
Solution 1
You could "factorize" your code like this:
Route::prefix('manager')->group(function () {
Route::middleware(['manager_guest'])->group(function () {
// These will be prefixed with "manager" and assigned the "manager_guest" middleware
});
Route::middleware(['manager_auth'])->group(function () {
// These will be prefixed with "manager" and assigned the "manager_auth" middleware
});
// These will just be prefixed with "manager"
});
I noticed all your controllers live in the sub-namespace Manager. You can chain the methods and make your routes file even cleaner. For instance:
Route::prefix('manager')->namespace('Manager')->group(function () {
Route::middleware(['manager_guest'])->group(function () {
Route::get('register', 'RegisterController@showRegister')->name('mananger.register.create');
});
Route::middleware(['manager_auth'])->group(function () {
Route::get('profile', 'PageController@profile')->name('mananger.profile');
});
});
Solution 2
Try this instead
Route::group(['prefix' => 'manager', 'middleware' => 'manager_guest'], function() {
});
Rakesh Roy
Hi, I’m Rakesh, I'm a Full-Stack Developer with over 5 years of experience building interactive sites for global clients. Using modern web technologies such as WordPress, Angular, Barbajs and Mobile technologies using Flutter and Ionic, I'm able to deliver fast, accessible and SEO optimised web experiences efficiently and to a high standard.
Updated on June 05, 2022Comments
-
Rakesh Roy almost 2 years
I need all the route under same prefix manager with one middleware for guest manager_guest and another for logged in user manager_auth. This code bellow is my route web.php file.
Is there any other way ?
My routes:
Route::prefix('manager')->group(['middleware' => 'manager_guest'], function () { Route::get('/register', 'Manager\RegisterController@showRegister')->name('manager.register.create'); Route::post('/register', 'Manager\RegisterController@register')->name('manager.register.store'); Route::get('/login', 'Manager\LoginController@showLogin')->name('manager.login.create'); Route::post('/login', 'Manager\LoginController@login')->name('manager.login'); }); Route::prefix('manager')->group(['middleware' => 'manager_auth'], function () { Route::post('/logout', 'Manager\LoginController@logout')->name('manager.logout'); Route::get('/profile', 'Manager\PageController@profile')->name('manager.profile'); });
Error after executing
php artisan route:list
PHP Warning: Uncaught ErrorException: Array to string conversion in E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php:329 Stack trace: #0 E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(329): Illuminate\Foundation\Bootstrap\HandleExceptions->handleError(8, 'Array to string...', 'E:\\laragon\\www\\...', 3 29, Array) #1 E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(329): require() #2 E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(285): Illuminate\Routing\Router->loadRoutes(Array) #3 E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate\Routing\RouteRegistrar.php(104): Illuminate\Routing\Router->group(Array, Array) #4 E:\laragon\www\laraveladmin\routes\web.php(30): Illuminate\Routing\RouteRegistrar->group(Array, Object(Closure)) #5 E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php(329): require('E:\\laragon\\www\\...') #6 in E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate\Routing\Router.php on line 329 PHP Fatal error: Illuminate\Routing\Router::loadRoutes(): Failed opening required 'Array' (include_path='E:\Developer\Wbserver\php\PEAR') in E:\laragon\www\laraveladmin\vendor\laravel\framework\src\Illuminate \Routing\Router.php on line 329 [Symfony\Component\Debug\Exception\FatalErrorException] Illuminate\Routing\Router::loadRoutes(): Failed opening required 'Array' (include_path='E:\Developer\Wbserver\php\PEAR')