我对Laravel相对陌生,并自学了一些新技术和平台。我喜欢Laravel的路由功能,只是想知道是否有一种方法可以动态地路由到路由组中的资源。
Route::group(['domain' => 'api.domain.dev', 'prefix' => '/{version}/{resource}'],
function ($ignore, $version = 'v1', $resource = 'test') {
// Check if resource exists, if not 404
$path = '../app/Http/Controllers/api/'.$version.'/'.$resource.'Controller.php';
if (!File::exists($path)) {
abort(404);
}
// Add magic method __get to handle errors and use interface to ensure all methods are available
Route::get('', "api''{$version}''{$resource}Controller@index");
Route::put('', "api''{$version}''{$resource}Controller@put");
Route::post('', "api''{$version}''{$resource}Controller@post");
Route::delete('', "api''{$version}''{$resource}Controller@delete");
}
);
从本质上讲,我试图实现的是将所有API子域路由到一个组中。然后使用版本号动态路由到一组控制器,这些控制器将按文件夹名称进行拆分。
示例URL
http://api.domain.com/v1/test
要在Laravel中创建具有版本控制、名称空间和前缀的动态URL路由,可以在routes/api.php文件中使用group方法。
Route::middleware(APIversion::class)->prefix('{version}/{device}')->group(function () {
Route::group(['namespace' => 'Api'''.request()->route('version').''''], function () {
Route::controller(AuthController::class)->group(function(){
Route::post('/login',['as' => 'login', 'uses' => 'login']);
});
});
});
这应该行得通。