Laravel 5.5,会话依赖路由

ped*_*dra 2 php laravel laravel-5

我开始学习 laravel 5.5 并尝试根据会话创建路线

\n\n

我在 web.php 中的代码是:

\n\n
if(session()->has("user")){\n Route::any(\'/profile/view\',"ProfileController@view");\n}\n\nif(session()->has("admin")){\n    Route::any(\'/game/new\', "gameController@new");\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

但它不起作用,它显示“找不到页面”。
\n我怎样才能做到这一点?

\n

Ben*_*Ben 5

RouteServiceProvider在中间件之前启动StartSession,因此您无法访问路由文件中的会话。使用middleware来代替检查。

Route::middleware('session.has.user')->group(function () {
    Route::any('/profile/view',"ProfileController@view");
});

Route::middleware('session.has.admin')->group(function () {
    Route::any('/game/new', "gameController@new");
});
Run Code Online (Sandbox Code Playgroud)

创建中间件:

php artisan make:middleware SessionHasUser
php artisan make:middleware SessionHasAdmin
Run Code Online (Sandbox Code Playgroud)

更新中间件检查session,如果没有对应的session,则中止请求:

应用程序/Http/Middleware/SessionHasUser.php

public function handle($request, Closure $next)
{
    if(session()->has("user")) {
        return $next($request);
    }
    return abort(404);
}
Run Code Online (Sandbox Code Playgroud)

安装中间件,以便路由可以使用中间件

应用程序/Http/Kernel.php

protected $middlewareGroups = [
    'web' => [
        ...
        'session.has.user' => , \App\Http\Middleware\SessionHasUser::class,
        'session.has.admin' => \App\Http\Middleware\SessionHasAdmin::class,
        ...
    ],
Run Code Online (Sandbox Code Playgroud)