Laravel的路由功能很强大,默认都是定义在routes.php文件中,随着项目越来越大,我们需要的定义的路由越来越多,想象一下,如果几百上千个路由都定义在一个文件中,如何去维护?也许还有不同的人都在同一个文件定义路由,这就造成了冲突,因此我们需要分割routes.php文件,下面介绍一种很优雅的方式。
在app/Providers/RouteServiceProvider.php的map方法中可以如下定义:
public function map(Router $router){
$router->group(['namespace'=>$this->namespace],function($router) {
foreach(glob(app_path('Http//Routes') .'/*.php') as $file) {
$this->app->make('App\\Http\\Routes\\'. basename($file,'.php'))->map($router);
}
});
}
文件组织结构图如下:
这样它会遍历app/Http/Routes/文件夹下的文件,遍历每个文件路由类的map方法,每个文件的结构都类似,如下:
把路由规则都写到每个文件的map方法中,这样一来,就实现了很好的routes.php文件的分开管理。此外,你也可以简单的分割,直接把routes.php中的定义拆散成多个文件,通过 require 的方式引入,但是哪个更好,一目了然。
那么这样路由分开多个文件后岂不是增加调用次数,会不会影响性能?答案是不必担心。通过 Laravel 的命令:
php artisan route:cache
生成路由缓存文件后,路由只会读取缓存文件的路由规则,因此不会影响性能,这样做让开发更高效和规范。