2017-08-02 23 views
1

我使用流明我的项目,目前的方式,我的版本我的API是通过前缀,并使用像这样一个特定的相应的控制器:流明/巴丁格API动态版本

$api->get('/v1/users', 'App\Api\V1\Controllers\[email protected]'); 
$api->get('/v2/users', 'App\Api\V2\Controllers\[email protected]'); 

我想改变这一点,这样我就可以从用户那里得到一个参数并根据该参数使用一个控制器。

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

Should use this controller: 
'App\Api\V{api_version}\Controllers\[email protected]' 

我目前正在沿着流明使用流行,反正有没有流明或流行做到这一点?

回答

1

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

路线/ 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 */]); 
}); 
+0

谢谢您的回复!这真的很有帮助,可以发挥魅力。然而,我想知道make()做了什么? –

+0

https://laravel.com/docs/5.4/container#the-make-method – Spingolini