Laravel 多路由配置

时间:2019-08-29 标签: PHP | Laravel

默认安装的 Laravel 框架中,路由文件分为 webapi;如果把项目所有模块的路由都放在这两个文件中,那么路由文件就显得很臃肿,以至于后期难以维护,解决方案可以根据不同模块配置不同路由文件。

打开 \app\Providers\RouteServiceProvider.php 文件,找到 map() 方法,这个地方还特意划了两个斜杠,意思是你可以扩展自己的路由文件。

public function map()
{
    $this->mapApiRoutes();
    $this->mapWebRoutes();
    //
}

新增一个 admin 路由:

public function map()
{
    $this->mapApiRoutes();
    $this->mapWebRoutes();
    $this->mapAdminRoutes();
}

新增 mapAdminRoutes 方法:

protected function mapAdminRoutes()
{
    Route::prefix('admin') //后缀,demo.com/admin
        ->middleware('web')
        ->namespace($this->namespace . '\Admin') //命名空间
        ->group(base_path('routes/admin.php')); //路由文件
}

注意 middleware(‘web’),这里面的 web 其实对应着 \App\Http\Kernel 中的路由中间件分组 web (可查看 \app\Http\Kernel.php 文件中的 middlewareGroups 数组),同时也会把对应的路由转发到 routes/web.php 中;如果不添加 middleware(‘web’) ,很明显的问题如:admin 中模板使用 csrf_field() ,渲染后 _token 的 value 为空。当然,你也可以在 $middlewareGroups 数组中自定义 admin 分组。

//app\Http\Kernel.php中的middlewareGroups数组
protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
        \Illuminate\Routing\Middleware\SubstituteBindings::class,
    ],

    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];

设置完成后,在 /routes 文件夹下创建 admin.php 文件,即可添加 admin 模块下的路由规则。

© 2020 Lh1010 - 豫ICP备16115435号-1