Как исключить "/api" из "любого"-рута в маршрутизаторе Lumen (согласно регулярному выражению)?

У меня проблема с роутером Lumen (web.php): Мой проект включает vue.js с роутером vue, поэтому я хочу указать все маршруты к роутеру, что действительно работает нормально.

$router->get('{path:.*}', function () {
    return view('app');
});

Моя проблема: у меня также есть несколько API-маршрутов, которые обрабатываются Lumen/ контроллерами:

$router->group(['prefix' => 'api'], function ($router) {
    $router->group(['prefix' => 'authors'], function ($router) {
        $router->get('/', 'AuthorController@showAllAuthors');
        $router->get('/id/{id}', 'AuthorController@showAuthorById');
    });
});

Ну и маршрут localhost/api/authors просто отлично работает Но localhost/api/authors/1 возвращает приложение..

Я думал о включении исключения в маршрут Vue:

$router->get('{path:^(?!api).*$}'

..но это приведет к NotFoundHttpException. Что-то не так с регулярным выражением? Следует исключить все маршруты, начинающиеся с /api,

1 ответ

Решение

Ты действительно близко. Регулярное выражение происходит после операторов get / post в маршрутах laravel. Вот так:

$router->get('/{catch?}', function () { 
    return view('app'); 
})->where('catch', '^(?!api).*$');

Вот документы для справки: https://laravel.com/docs/5.8/routing

Редактировать: Специфичный для люмена должен быть решен в префиксе группы.

$router->get('/{route:.*}/', function () { 
    return view('app'); 
});
Другие вопросы по тегам