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 这里重复声明
关于 LearnKu
曾经用xhprof分析过laravel的执行流程,发现大部分时间都消耗在解析路由上了。laravel的路由功能虽然强大,但是代价是很大程度上拉低了应用的运行效率。
如果是API项目,那是非常不推荐使用Laravel的,最大的问题就是太慢了。Lumen的出现的就是为了解决这个问题,它使用FastRoute作为路由组件,虽然使用起来没有laravel的路由那么方便,但是效率上提高了太多,而且也能满足所有的路由规则配置,你的情况完全可以使用多个平行的group来实现。
@song 感谢你的分析,我也试过平衡的group,但问题似乎不仅仅这么严重呢
@song 有个route:cache 命令,可以试试。
@oustn lumen根本没这玩意的
@binafor 他@的是song
route:cache命令使用serialize()把路由信息序列化成字符串存入文件,但是serialize()不能处理闭包,所以除非你的路由里面没有使用闭包,否则不能用这个命令Lumen 5.4 是支持的,5.3 不清楚