利用头信息中的 HTTP_ACCEPT 控制版本号,再通过版本号来控制命名空间。HTTP_ACCEPT 添加版本号
version=1.0
在项目文件的laravelvendorlaravelframeworksrcIlluminateRoutingRouter.php 添加方法
//定义版本号与命名空间
protected $NameSpaceMap=array(
'v1.0'=>'v1',
'v2.0'=>'v2',
'v3.0'=>'v3',
);
public function getNameSpace()
{
$str=$_SERVER['HTTP_ACCEPT'];
$str=str_replace(';','&',$str);
parse_str($str,$array);
$version=$array['version'];
if(in_array($version,$this->NameSpaceMap)){
return $this->NameSpaceMap[$version];;
}
reset($this->NameSpaceMap);
return current($this->NameSpaceMap);
}
然后路由里面定义命名空间
Route::group(['namespace'=>Route::getNameSpace()],function(){
...
});
控制层目录这样放
最后的效果(ps:懒得写控制器了,命名空间对就好)
国外laravel api 案例 https://github.com/dingo/api