Lumen/Dingo API 动态版本控制

Lumen/Dingo API Dynamic Versioning

我正在为我的项目使用 Lumen,目前我对 API 进行版本控制的方式是通过前缀和使用特定的相应控制器,如下所示:

$api->get('/v1/users', 'App\Api\V1\Controllers\UserController@show');
$api->get('/v2/users', 'App\Api\V2\Controllers\UserController@show');

我想对此进行更改,以便我从用户那里获取参数并使用基于该参数的控制器。

This Route:
$api->get('/v{api_version}/users'...

Should use this controller: 
'App\Api\V{api_version}\Controllers\UserController@show'

我目前正在将 Dingo 与 Lumen 一起使用,是否可以同时使用 Lumen 或 Dingo?

是的,你可以。但这比你的例子稍微复杂一点,但它仍然是单行代码。只需定义一个闭包并在其中调用您的控制器,而不是直接传递 FQCN 控制器名称。

routes/web.php

$app->get("api/v{version}/users", function ($version) use ($app) {
    return $app->make("App\Api\V{$version}\Controllers\UserController")->show();
});

如果其他人(像我一样)对如何在 laravel 安装中实现同样的目标感兴趣:只需在控制器解析后使用方法 Controller::callAction()

Route::get("api/v{version}/test", function ($version) {
    return app()->make('App\Api\V{$version}\Controllers\UserController')->callAction("show", [/* arguments */]);
});