API 值为 post 数据的路由前缀

API route prefix with a value of post data

是否可以有一个动态 API 路由前缀,其值基于 post 请求数据中的 organization 字段?

例如post请求数据为:

id: 1, name: 'John Doe', organization: 'CISCO'

我想要的路线是:

Route::prefix('CISCO')->group(function() {
    Route::post('create', [Controller::class, 'create'];
})

如果不可能,是否有任何其他方法可以传递 organization 值,以便我能够构建动态前缀路由?

在您的示例中,CISCO 是您的 URL 中的一个参数。

你可以这样做:

Route::prefix('{organization}')->group(function() {
    Route::post('create', [Controller::class, 'create'];
});

通向这条路线:

POST http://youdomain.com/CISCO/create

然后在你的控制器中:

public function create($organization)
{
    dd($organization); //CISCO
}

小心这样的前缀,因为它会导致路由问题。例如,如果您有另一条这样的路线:

Route::prefix('{organization}')->group(function() {
    Route::post('create', [Controller::class, 'create'];
});

Route::prefix('{shop}')->group(function() {
    Route::post('create', [ShopController::class, 'create'];
});

Laravel 将很难理解应该使用哪条路线。

这里最好的做法是添加另一个前缀,所以它看起来像这样:

Route::prefix('organization/{organization}')->group(function() {
    Route::post('create', [Controller::class, 'create'];
});

Route::prefix('shop/{shop}')->group(function() {
    Route::post('create', [ShopController::class, 'create'];
});

此外,请记住,当您有多个路由使用前缀时,使用前缀很有用。如果你只有一条路线,你应该只做这样的事情:


Route::post('organization/{organization}/create', [Controller::class, 'create'];
Route::post('shop/{shop}/create', [ShopController::class, 'create'];