Laravel 5.4路由相同的前缀组但不同的中间件给出错误

问题描述 投票:4回答:3

我需要在同一前缀管理器下的所有路由,其中​​一个中间件用于guest manager_guest,另一个用于登录用户manager_auth。下面的代码是我的路由web.php文件。

还有其他方法吗?

我的路线:

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');
});

执行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')
php laravel-5 routing
3个回答
6
投票

您可以像这样“分解”您的代码:

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"
});

我注意到所有控制器都存在于子命名空间管理器中。您可以链接方法并使您的路线文件更清晰。例如:

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');
    });
});

11
投票

试试这个

Route::group(['prefix' => 'manager',  'middleware' => 'manager_guest'], function() {

    });

0
投票

没有其他答案对我有用,因为我有很多路径要改变,并且不想更改名称空间。做这项工作的关键是“作为”。这样做的缺点是它在使用“route()”时改变了路径,但是你在这里使用每条路线上的名字无论如何都会覆盖它。

Route::group(['prefix' => 'manager', 'middleware' => ['manager_guest'], 'as' => 'manager_guest'], function() {
  ...
}

Route::group(['prefix' => 'manager', 'middleware' => ['manager_auth'], 'as' => 'manager_auth'], function() {
  ...
}
© www.soinside.com 2019 - 2024. All rights reserved.