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 */]);
});
我正在为我的项目使用 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 */]);
});