laravel重构路由、重构route.php,进行路由分离

路由,我们直接参照官网的文档接口,主要涉及2个文件:
	app/Http/routes.php		// 我们定义的路由
	app/Providers/RouteServiceProvider.php		// 路由服务,会载入定义的路由文件(上面的routes.php)

基本用法,参考文档。
今天记录的主要目的是:对于整个项目,所有的路由,都写在 'routes.php' 中,文件太大,而且很不清晰。
我们根据业务,按目录来划分路由文件!

分析 RouteServiceProvider.php

	public function map(Router $router)
    {

    	/*
    		很清楚的看到,这里已经使用过 'group' 路由群组了,而且:
    			namespace = App\Http\Controllers	// 这也就是我们在routes.php 直接写 Controllers/ 之后的原因
    	 */
        $router->group(['namespace' => $this->namespace], function ($router) {
            require app_path('Http/routes.php');
        });
    }

开始重构:
	1.在app/Http/下,创建 'Routes' 目录

	2.自定义方法:
    protected function mapCustomWebRoutes(Router $router)
    {
        $router->group([
            'namespace' => $this->namespace, 'middleware' => 'web',
        ], function ($router) {
            $route_files = glob(app_path() . '/Http/Routes/*.php');
            foreach($route_files as $filename){
                require_once($filename);
            }
        });
    }

    3.将我们自定义的方法,添加到 map() 方法中:
    public function map(Router $router)
    {
        $router->group(['namespace' => $this->namespace], function ($router) {
            require app_path('Http/routes.php');
        });
        $this->mapCustomWebRoutes($router);
    }
/*
    上面的重构,出现了一个问题:
        我的验证机制,都记录不到了错误输出!!(折腾了好久!)
 */
各种调试,都不清楚什么原因,确实有错误,考虑session中也生成了错误,但是就是再次进入页面,不显示!这种情况,觉得,只有可能是中间件的问题。
web中间件组,包含了 'ShareErrorsFromSession' 中间件,就是分配错误的!
将拆分出来的路由,重新移入 'routes.php',就可以显示验证错误了!然后查看重构的逻辑,发现:
        $router->group([
            'namespace' => $this->namespace, 'middleware' => 'web',
            /*
                这里我为了不让每个文件内部再次写 'web',直接在最外层已经使用了 'web'。然而,我的每个文件内,再次写入了web
                google搜索,2次web中间件,可能出现了2次不同的session!,导致认证不了!(可能是这个情况,英文没仔细看,记得好像有类似的意思!)
             */ 
        ], function ($router) {
            $route_files = glob(app_path() . '/Http/Routes/*.php');
            foreach($route_files as $filename){
                require_once($filename);
            }
        });

上述是 5.2 版本的,现在将我们项目的框架升级到了 5.7,仍然使用这种思路,修改了路由:

    public function map()
    {
        $this->mapApiRoutes();

        $this->mapWebRoutes();

        // 自定义 web 路由
        $this->mapCustomWebRoutes();
    }


    /*
        自定义引入 'Http/Routes' 下的子路由文件
     */
    protected function mapCustomWebRoutes()
    {

        // 注意,给全局,都已经添加了 'web' 中间件组,内部文件 "一定" 不要再次写入 'web',否则validate验证,不显示错误!!
        Route::group(['namespace' => $this->namespace, 'middleware' => 'web'], function ($router) {
                /*
                    参考博客笔记地址:
                        http://blog.csdn.net/beyond__devil/article/details/78583157
                 */

                // 临时记录文件系统 'local' 驱动 'root' 配置
                $old_root_config = config('filesystems.disks.local.root');
                // 修改默认的文件系统 '根路径'
                config(['filesystems.disks.local.root' => base_path('routes/web')]);
                $route_files = Storage::disk('local')->allFiles();
                foreach($route_files as $filename){

                    // 跳过 mac 下一直生成的 '.DS_Store' 文件
                    if(strpos($filename, '.DS_Store') !== false){
                        continue;
                    }
                    require_once(base_path('routes/web') . '/' . $filename);
                }
                // 恢复文件系统 'local' 驱动 'root' 配置
                config(['filesystems.disks.local.root' => $old_root_config]);
                unset($old_root_config);
        });
    }

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值