zoukankan      html  css  js  c++  java
  • Laravel LTS 分割 路由文件的最佳方式

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

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

    <?php
    
    namespace AppProviders;
    
    use IlluminateRoutingRouter;  
    use IlluminateFoundationSupportProvidersRouteServiceProvider 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 = 'AppHttpControllers';
        protected $api_namespace = 'AppHttpApiControllers';
    
        /**
         * Define your route model bindings, pattern filters, etc.
         *
         * @param  IlluminateRoutingRouter  $router
         * @return void
         */
        public function boot(Router $router)
        {
            $router->pattern('id', '[0-9]+');
    
            parent::boot($router);
        }
    
        /**
         * Define the routes for the application.
         *
         * @param  IlluminateRoutingRouter  $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('DingoApiRoutingRouter');
            $api_router->group([
                'version'   => config('api.prefix'),
                'namespace' => $this->api_namespace,
            ], function ($router) {
                require base_path('routes/api.php');
            });
        }
    }
    

    文件夹结构如下:

    file

    笔者在以前的项目中,Route,都是以各个路由组在路由中定义,一旦一个项目浅浅庞大,路由也略显臃肿。

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

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

    php artisan route:cache  
    

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

    原文出处

  • 相关阅读:
    02-线性结构1 两个有序链表序列的合并
    ScSPM
    中国大学MOOC-陈越、何钦铭-数据结构-笔记
    01-复杂度1 最大子列和问题(剑指offer和PAT)
    Matlab中配置VLFeat
    循环队列实现
    对于利用pca 和 cca 进行fmri激活区识别的理解
    对于利用ica进行fmri激活区识别的理解
    利用spm提供的MoAEpilot听觉数据学习预处理以及单被试glm分析与统计推断
    fsl的feat软件分包使用笔记
  • 原文地址:https://www.cnblogs.com/jhcyzxx/p/10479905.html
Copyright © 2011-2022 走看看