Lumen 如何处理手机 App 版本控制!
自项目开始以来版本控制就一直困扰着我,因为每次app升级一次版本就有很多东西要变更,曾经有人的做法是:每升级一次版本就在服务器上新建一个文件夹如v235,v236,v237... 存放最新的代码,然后域名配置的时候配置到v235/public/,v236/public ,v237/public ...这么做不是不行缺点是每次都要改服务器的配置文件风险太大。反正我觉得不行,如果我做的话我的思路如下:
客户端请求的时候在header中把版本号传递过来,根据不同的版本号读取不同的配置文件,配置文件中主要放了需要版本控制的接口以及用到的控制器的路径 调用的function等等这些可以自定义,根据获取到的当前的路由的名字查一下看是否在配置文件中,如果在的话直接使用配置文件中的控制器并调用配置文件中的function,传递的参数则是$request
具体步骤如下:
- 在config/下新建versionRoute235.php内容如下:
- return [
'purchase_orderlist' => [//这里是路由中指定的别名
'title' => 'description',//这里是描述
'controller' => 'App\Http\Controllers\testController'//这里是控制器的命名空间,
'function' => 'test',//这里是具体的function
],
]; -
新建中间件 VersionControlMiddle.php 内容handle如下:
public function handle($request, Closure $next)
{
if($request->header('app-version')){
//处理版本号
$appversion = $request->header('app-version');
$filterversion = implode('',explode('.',$appversion));//处理路由 我用的是lumen 如果是laravel的话可以通过 Route::currentRouteName(""); $routeArr = $request->route(); $currentRouteName = $routeArr[1]['as'];//获取当前路由名称 //获取对应的配置文件 $versionRoutes = config('versionRoutes'.$filterversion); if($versionRoutes[$currentRouteName]){ $controller = $versionRoutes[$currentRouteName]['controller']; $obj = new $controller(); $func = $versionRoutes[$currentRouteName]['function']; return $obj->$func($request); }else{ return response()->json ([ 'code' => 420, 'message' => 'Please add a new config file!', 'data' => new \stdClass() ]); } } return $next($request);
}
这样每次请求过来,都会获取请求 的路由名字然后判断是否在版本控制的路由列表中,如果在的话,直接实例化配置文件中的controller 调用的是配置文件中的function 参数就是$request。这样做的缺点就是每次升级app都要增加对应的版本的配置文件。每天进步一点点,希望水滴能帮到大家!
本作品采用《CC 协议》,转载必须注明作者和本文链接
dingo 不好用么
@Seaony 有不好用的可以私信我,有时间,我会回复的。