我现在的想法是希望控制器里面的目录格式是这样的:
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 中传输)是怎么处理的?
1
1762628386 2016-10-19 11:52:10 +08:00
用 group 然后设置默认参数
|
2
airycanon 2016-10-19 11:54:19 +08:00
Laravel 的路由支持 namespace ,请看这里: https://laravel.com/docs/5.3/routing
|
3
lijinma 2016-10-19 11:56:08 +08:00
建议你直接使用 dingo ,不但解决你这个问题。
也会解决你将来可能出现的问题。 |
6
doublleft 2016-10-19 14:19:16 +08:00
直接全量管理吧
/apps/1.1.0/source /apps/1.1.1/source |
7
karocXing OP |
9
doublleft 2016-10-21 14:04:53 +08:00
|