【问题标题】:How to exclude "/api" from "any"-route in Lumen router (per regex)?如何从 Lumen 路由器中的“任何”路由中排除“/api”(每个正则表达式)?
【发布时间】:2019-12-13 08:39:06
【问题描述】:

我的 Lumen 路由器 (web.php) 有问题: 我的项目包括 vue.js 和 vue 路由器,所以我想将所有路由指向路由器,确实可以正常工作。

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

我的问题是:我还有一些 api 路由,由 Lumen/controllers 处理:

$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开头的路由。

【问题讨论】:

    标签: regex laravel router lumen lumen-routing


    【解决方案1】:

    你真的很亲密。正则表达式发生在 laravel 路由中的 get/post 语句之后。像这样:

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

    这是供参考的文档: https://laravel.com/docs/5.8/routing#parameters-regular-expression-constraints

    编辑:流明特定应在组前缀中解决。

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

    【讨论】:

    • 谢谢你的回答,但问题是;流明没有where。您只需将正则表达式放入 get-parameter..
    • 对不起,我睡着了。更新了 Lumen 的答案。
    • 没问题! :) 虽然我再次将$app 更改为$router,但它仍然无法正常工作。我将我的应用程序一分为二,一部分用于后端,一部分仅用于 vue。现在它正在工作,但是..是的,不是我问题的答案。 ://
    • @zero2579 我做了一些测试并更改了我的答案。这对我来说非常有效。告诉我你得到了什么。
    • 如果你不使用vue路由器似乎可以工作。我不确定那有什么问题。但我想对于主要情况,这是正确的答案,谢谢!
    猜你喜欢
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 2015-10-21
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多