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
生成路由緩存文件後, 路由只會讀取緩存文件的路由規則, 所以不會影響性能, 這樣作讓開發更高效和規範.性能