Laravel 的路由功能很强大, 路由规则默认都定义在 routes.php 文件中,可是随着项目愈来愈大, 咱们须要的定义的规则愈来愈多, 若是几百上千个路由都定义在一个文件中, 如何去维护? 若是不一样的人都在同一个文件定义路由, 这就形成了冲突, 所以咱们有必要将 routes.php 文件分割成多个文件, 能够按照功能模块来划分, 下面介绍一种很优雅的方式.php
在 Laravel 5.1 LTS
版本 app/Providers/RouteServiceProvider.php
的 map
方法中能够以下定义:web
<?php namespace App\Providers; use Illuminate\Routing\Router; use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider; use Route; class RouteServiceProvider extends ServiceProvider { /** * This namespace is applied to the controller routes in your routes file. * * In addition, it is set as the URL generator's root namespace. * * @var string */ protected $namespace = 'App\Http\Controllers'; protected $api_namespace = 'App\Http\ApiControllers'; /** * Define your route model bindings, pattern filters, etc. * * @param \Illuminate\Routing\Router $router * @return void */ public function boot(Router $router) { $router->pattern('id', '[0-9]+'); parent::boot($router); } /** * Define the routes for the application. * * @param \Illuminate\Routing\Router $router * @return void */ public function map(Router $router) { $this->mapWebRoutes(); $this->mapApiRoutes(); } /** * Web 路由 */ protected function mapWebRoutes() { Route::group([ 'namespace' => $this->namespace, 'middleware' => 'restrict_web_access', ], function ($router) { require base_path('routes/web.php'); }); } /** * Api 路由 */ protected function mapApiRoutes() { $api_router = app('Dingo\Api\Routing\Router'); $api_router->group([ 'version' => config('api.prefix'), 'namespace' => $this->api_namespace, ], function ($router) { require base_path('routes/api.php'); }); } }
文件夹结构以下:api
笔者在之前的项目中,
Route
,都是以各个路由组在路由中定义,一旦一个项目浅浅庞大,路由也略显臃肿。缓存
经过把路由规则分割写到不一样的文件中, 这样一来, 就能够根据功能模块分开管理路由文件了. 此外, 你也能够简单的分割, 直接把 routes.php
中的定义拆散成多个文件, 经过 require
的方式引入.app
那么这样路由分开多个文件后岂不是增长调用次数, 会不会影响性能? 答案是没必要担忧. 经过 Laravel 的命令:ide
php artisan route:cache
生成路由缓存文件后, 路由只会读取缓存文件的路由规则, 所以不会影响性能, 这样作让开发更高效和规范.性能