我现在的想法是希望控制器里面的目录格式是这样的:
Controllers/v1_1/IndexController.php
Controllers/v1_1/ListsController.php
...
Controllers/v2_1/IndexController.php
...
因为版本号是在 Accept 里面传过来的,通过中间件进行校验和获取,那么在路由里面应该怎么去做才能做到根据中间件设置好的参数去不同版本里面呢?
( 1 )
preg_match("/; version\=([0-9\.]+)$/", $request->server("HTTP_ACCEPT"), $params);
if(isset($params[1]) && isset($this::$versions[$params[1]])){
$appVersion = $this::$versions[$params[1]];
$request->attributes->add(compact("appVersion"));
$return = $next($request);
}else{
$return = response(null,406);
}
return $return;
( 2 )
$app->get('/index',[
'as'=>'index',
'uses'=>'IndexController@index'
]);
想把( 2 )实现为
$app->get('/index',[
'as'=>'index',
'uses'=>appVersion.'\IndexController@index'
]);
但是在( 2 )这样的时候中间件还没执行,只有( 3 )的时候能做到,但是( 3 )的形式又怎么去路由给我希望的控制器?
( 3 )
$app->get('/index',[
'as'=>'index',
function () use ($app) {
return $app->request->attributes->get("appVersion");
}
]);
是直接在里面 new 吗?还是有什么我没找到的更好一些的方法? 或者是大家在这样的情况下(版本号在 Accept 中传输)是怎么处理的?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.