У меня есть следующий маршрут в моем routs / 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 в файле routs / 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?
Лучше всего предположить, что эти глаголы отключены в route / web.php для запросов на основе API и выполняется только при отправке с помощью формы в том же домене.В качестве альтернативы это может быть CSRF, блокирующий запрос, возможно, что-то, чего мне не хватает.
Любой совет будет высоко оценен.