Php Laravel 5.5,路由取决于会话

Php Laravel 5.5,路由取决于会话,php,laravel,laravel-5,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"); } 但它不起作用,它会显示“未找到页面”。 如何做到这一点?Ro

我开始学习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");
}
但它不起作用,它会显示“未找到页面”。

如何做到这一点?

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

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
更新中间件以检查会话,如果没有相应的会话,请中止请求:

app/Http/Middleware/SessionHasUser.php

public function handle($request, Closure $next)
{
    if(session()->has("user")) {
        return $next($request);
    }
    return abort(404);
}
protected $middlewareGroups = [
    'web' => [
        ...
        'session.has.user' => , \App\Http\Middleware\SessionHasUser::class,
        'session.has.admin' => \App\Http\Middleware\SessionHasAdmin::class,
        ...
    ],
安装中间件,以便路由可以使用中间件

app/Http/Kernel.php

public function handle($request, Closure $next)
{
    if(session()->has("user")) {
        return $next($request);
    }
    return abort(404);
}
protected $middlewareGroups = [
    'web' => [
        ...
        'session.has.user' => , \App\Http\Middleware\SessionHasUser::class,
        'session.has.admin' => \App\Http\Middleware\SessionHasAdmin::class,
        ...
    ],

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

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
更新中间件以检查会话,如果没有相应的会话,请中止请求:

app/Http/Middleware/SessionHasUser.php

public function handle($request, Closure $next)
{
    if(session()->has("user")) {
        return $next($request);
    }
    return abort(404);
}
protected $middlewareGroups = [
    'web' => [
        ...
        'session.has.user' => , \App\Http\Middleware\SessionHasUser::class,
        'session.has.admin' => \App\Http\Middleware\SessionHasAdmin::class,
        ...
    ],
安装中间件,以便路由可以使用中间件

app/Http/Kernel.php

public function handle($request, Closure $next)
{
    if(session()->has("user")) {
        return $next($request);
    }
    return abort(404);
}
protected $middlewareGroups = [
    'web' => [
        ...
        'session.has.user' => , \App\Http\Middleware\SessionHasUser::class,
        'session.has.admin' => \App\Http\Middleware\SessionHasAdmin::class,
        ...
    ],

最后一部分应该转到$routeMiddleware数组,而不是$middlewareGroups中。。使用您的代码,Laravel将搜索不存在的类“session.has.user”。最后一部分应转到$routeMiddleware数组,而不是$middlewareGroups中。。使用您的代码,Laravel将搜索不存在的类“session.has.user”。