Как исключить "/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');
});