#laravel #laravel-8 #laravel-routing
Вопрос:
Возможно ли иметь префикс маршрута динамического API, значение которого основано на organization
поле из данных запроса post?
Например, данные запроса post являются:
id: 1, name: 'John Doe', organization: 'CISCO'
Чего я хотел в своем маршруте, так это:
Route::prefix('CISCO')->group(function() {
Route::post('create', [Controller::class, 'create'];
})
И если это невозможно, есть ли какой-либо другой способ передать organization
значение, чтобы я мог структурировать маршрут с динамическим префиксом?
Ответ №1:
В вашем примере 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'];
});
Ларавелю будет трудно понять, какой маршрут он должен использовать.
Хорошей практикой здесь является добавление еще одного префикса, так что это выглядит следующим образом:
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'];
Комментарии:
1. Спасибо @toyi, на данный момент я не могу голосовать из-за моей низкой репутации. приму этот ответ через 4 минуты.
2. Спасибо! Рад, что это решает вашу проблему. Я обновил свой ответ некоторой дополнительной информацией, которая может быть вам полезна. Хорошего вам дня 🙂