Laravel 多路由配置
2019-08-29
默认安装的 Laravel 框架中,路由文件分为 web
和 api
;如果把项目所有模块的路由都放在这两个文件中,那么路由文件就显得很臃肿,以至于后期难以维护,解决方案可以根据不同模块配置不同路由文件。
打开 \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
模块下的路由规则。