Laravel 5.5,路由依赖于会话

时间:2018-04-05 18:29:18

标签: php laravel laravel-5

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

我在web.php中的代码是:

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

if(session()->has("admin")){
    Route::any('/game/new', "gameController@new");
}

但它不起作用,它显示“找不到页面”。
我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

RouteServiceProviderStartSession中间件之前启动,因此您无法访问路由文件中的会话。请改用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");
});

创建中间件:

php artisan make:middleware SessionHasUser
php artisan make:middleware SessionHasAdmin

更新中间件以检查会话,如果没有相应的会话,则中止请求:

应用/ HTTP /中间件/ SessionHasUser.php

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

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

应用/ HTTP / Kernel.php

protected $middlewareGroups = [
    'web' => [
        ...
        'session.has.user' => , \App\Http\Middleware\SessionHasUser::class,
        'session.has.admin' => \App\Http\Middleware\SessionHasAdmin::class,
        ...
    ],