Lumen 的路由不能嵌套这个问题你们是如何接受的?

直接贴代码

// routes.php

$app->group(['prefix'=>'api',], function () use ($app){

    $app->group(['prefix'=>'v2',], function () use ($app) {
        $app->get('/test', function () use ($app) {
            return $app->version();
        });
    });

    $app->get('/v1', function () use ($app) {
        return $app->version();
    });
});
# document root
php artisan --version
Laravel Framework version Lumen (5.3.1) (Laravel Components 5.3.*)

cd public
php -S 127.0.0.1:3000 index.php
get http://127.0.0.1:3000/api/v1 
Lumen (5.3.1) (Laravel Components 5.3.*)
get http://127.0.0.1:3000/api/v2/test
404 NotFoundHttpException in RoutesRequests.php line 461:

这可咋整,完全无法接受,换回了 laravel 5.1 :cry:

append

感谢 1 楼 (@song) 的建议,不过其实我要说的不只是这一个问题呢。我的问题是:lumen 的路由的 group 似乎只能被定义一次呢

//bootstrap/app.php line 93-98
$app->group(['namespace' => 'App\Http\Controllers'], function ($app) {
    require __DIR__.'/../app/Http/routes.php';
});

//routes.php

$app->group(['prefix' => 'api/v2', 'namespace' => 'App\Http\Controllers'], function () use ($app) {
    $app->get('test', 'Test\ExampleController@index');
});

上面的代码,如果 routes.php 下没有 namespace 那么子目录下的控制器也找不到。必须在 group 这里重复声明

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 7

曾经用 xhprof 分析过 laravel 的执行流程,发现大部分时间都消耗在解析路由上了。laravel 的路由功能虽然强大,但是代价是很大程度上拉低了应用的运行效率。

如果是 API 项目,那是非常不推荐使用 Laravel 的,最大的问题就是太慢了。Lumen 的出现的就是为了解决这个问题,它使用 FastRoute 作为路由组件,虽然使用起来没有 laravel 的路由那么方便,但是效率上提高了太多,而且也能满足所有的路由规则配置,你的情况完全可以使用多个平行的 group 来实现。

8年前 评论

@song 感谢你的分析,我也试过平衡的 group,但问题似乎不仅仅这么严重呢

8年前 评论

@song 有个 route:cache 命令,可以试试。

8年前 评论

@oustn lumen 根本没这玩意的

8年前 评论

@binafor 他 @的是 song

8年前 评论

route:cache 命令使用 serialize () 把路由信息序列化成字符串存入文件,但是 serialize () 不能处理闭包,所以除非你的路由里面没有使用闭包,否则不能用这个命令

8年前 评论

Lumen 5.4 是支持的,5.3 不清楚

8年前 评论