Laravel版本:5.6随着API的迭代,新版本往往需要继承旧版本的功能,对原有功能进行修改和扩展。这时候为了兼容各个版本接口,就需要进行版本控制。请求版本区分:在请求的header中添加版本信息,比如app-version:1.0.1Laravel的获取方式:Request::header('app-version');文件路径:1.0.1版本的UserController,文件路径为app/Http/Controllers/Api/v1d0d1/UserController.php1.0.2版本,也就是app/Http/Controllers/Api/v1d0d2/UserController.php注意如果是版本1.0.2需要使用1.0.1的原有功能,需要继承原有的classuseApp\Http\Controllers\Api\UserControllerasUserCtrl;classUserControllerextendsUserCtrl{...}versioncontrol版本分析方法:functiongetRouteContoller($controllerName){$base_path='App\Http\Controllers\Api\\';//无版本$app_version=Request::header('app-version');如果(!$app_version)返回$controllerName;//当前版本$version_path='v'.str_replace('.','d',$app_version).'\\';$controllerPath=$base_path。$版本路径。$控制器名称;如果(class_exists($controllerPath)){返回$version_path。$控制器名称;}//之前的版本$versionNumbers=intval(str_replace('.','',$app_version));对于($i=$versionNumbers-1;$i>0;$i--){$version_path='v'。内爆('d',str_split($i))。'\\';$controllerPath=$base_path。$版本路径。$控制器名称;如果(class_exists($controllerPath)){返回$version_path。$控制器名称;}}return$controllerName;}注意:该方法会把1.0.2版本解析成v1d0d2,判断对应的类是否存在。如果存在,则直接返回类的路径;如果不存在,就会往下查找1.0.1版本的class是否存在,直到找到一个存在的class返回路由文件Route::post('login',getRouteContoller('UserController').'login');
