Маршрут перенаправления Laravel в API - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть следующий маршрут в моем 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, блокирующий запрос, возможно, что-то, чего мне не хватает.

Любой совет будет высоко оценен.

...