Laravel routes.php 使用会话包含文件

Laravel routes.php include file using Session

不确定这是否可行,但就是这样。

我想要做的是将我的 "admin" 路由作为一个单独的文件包含在内,前提是用户是管理员(因此非管理员将收到 404 错误

routes.php

if( Session::get('user')->is_admin )
    require_once('routes-admin.php');

if( Auth::check() )
    require_once('routes-user.php');

Route::get('/', function() {
    return view('home');
});

路线-admin.php

Route::get('admin', function() {
    return view('admin-dashboard');
});

路线-user.php

Route::get('user', function() {
    return view('user-dashboard');
});

我想做的是避免每次都重复测试 Route 因此,如果我的用户段有 10 个页面,我目前需要 30 行专用于 Auth::check() 的代码(if、else 和 redirect if not),在这里我可以对 routes.php 和用户进行一次检查如果他们不属于

,将获得 404

有没有办法在 Route 之外执行此检查?

也许您想先阅读 documentation

Route::group(['middleware' => 'auth'], function()
{
    Route::get('/', function()
    {
        // Uses Auth Middleware
    });

    Route::get('user/profile', function()
    {
        // Uses Auth Middleware
    });

});

上面的代码正是你所需要的,就是"person logged in?"让他去页面"whatever"。

您可以自己创建中间件(检查用户是管理员还是基本用户)并应用于群组。

示例middleware

class BeforeMiddleware implements Middleware
{
    public function handle($request, Closure $next)
    {
        // Perform action

        return $next($request);
    }
}

不要误会,只是你的做法真的不像Laravel。尝试看看一些在 L5 甚至 L4 中完成的开源项目。尝试使用泰勒已经为你做的一切。文档是您的朋友。

根据@Kyslik 对中间件的回应,您可以在您的 RouteServiceProvider 中 "include" 您自己的路由文件,就像默认路由文件一样,RouteServiceProvide 位于:app/Providers/RouteServiceProvider.php,

查找部分

require app_path('Http/routes.php');

并且只需复制您想要包含的路由文件的名称