Laravel 分割 routes.php 路由文件的最佳方式

来源:互联网 发布:mt4数据导出系统 编辑:程序博客网 时间:2024/05/24 22:41

Laravel 的路由功能很强大, 路由规则默认都定义在 routes.php 文件中,但是随着项目越来越大, 我们需要的定义的规则越来越多, 如果几百上千个路由都定义在一个文件中, 如何去维护? 如果不同的人都在同一个文件定义路由, 这就造成了冲突, 因此我们有必要将 routes.php 文件分割成多个文件, 可以按照功能模块来划分, 下面介绍一种很优雅的方式.

Laravel 5.1 LTS 版本 app/Providers/RouteServiceProvider.phpmap 方法中可以如下定义:

<?phpnamespace 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');        });    }}

文件夹结构如下:

file

通过把路由规则分割写到不同的文件中, 这样一来, 就可以根据功能模块分开管理路由文件了. 此外, 你也可以简单的分割, 直接把 routes.php 中的定义拆散成多个文件, 通过require 的方式引入.

那么这样路由分开多个文件后岂不是增加调用次数, 会不会影响性能? 答案是不必担心. 通过 Laravel 的命令:

php artisan route:cache  

生成路由缓存文件后, 路由只会读取缓存文件的路由规则, 因此不会影响性能, 这样做让开发更高效和规范.

0 0
原创粉丝点击