Маршрут перенаправления Laravel в API
У меня есть следующий маршрут в моем файле route /web.php Laravel 5.7.
Route::match(['get', 'post', 'put', 'delete'], '{request}', function ($request) {
return redirect('api/'.$request);
})->where('request', '^(?!api).*');
Это правило маршрута проверяет любые маршруты, которые не начинаются с "api", добавляя "api" к маршруту и перенаправляя его.
Это хорошо работает для запросов GET, но не работает для запросов POST, PUT или DELETE. Я получаю HttpException, когда я пытаюсь что-то POST. Если я определяю индивидуальный маршрут POST, PUT или DELETE в файле route /web.php, я получаю тот же результат. Похоже, что запрос немедленно завершается неудачей, поэтому маршрут никогда не выполняется или не выполняется во время выполнения.
Route::post('some/feature/{feature_id}/{sub_feature_id}', 'API/SomeFeature@store');
Вот исключение, которое я получаю.
{
"exception": "Symfony\\Component\\HttpKernel\\Exception\\HttpException",
/* ... */
}
У нас есть старая система, которая использует следующую структуру маршрутизации. feature/{feature_id}/{sub_feature_id}
Новая система, над которой я работаю, имеет следующую структуру маршрутизации. api/v1/feature/{feature_id}/sub_feature/{sub_feature_id}
Что мне нужно сделать, это перенаправить все запросы, не начиная с API, к своим аналогам в новой системе.
Если я определяю маршруты старой системы в файле routs / api.php, они автоматически получат префикс "api", что не является моим желаемым поведением, поскольку в нашей старой системе нет префикса "api".
Есть ли способ заставить это работать для запросов POST, PUT и DELETE?
Мое предположение заключается в том, что эти глаголы отключены в маршрутах /web.php для запросов на основе API и выполняются только при отправке с помощью формы в том же домене. В качестве альтернативы это может быть CSRF, блокирующий запрос, возможно, то, что мне не хватает.
Любой совет будет высоко оценен.