laravel的路由分组下的每个路由是怎么获取到自己在哪个分组下的呢 求教原理

如下代码

// 访问 test/route 可以显示1
Route::prefix('test')->group(function() {
    Route::get('route', function() {
        return '1';
    });
});

调用的是 Route 门面 并非回调函数内传过来的 $route 变量,Laravel 是怎么知道他是在哪个分组下的呢?

:cry:求教

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

在 6.x 版本中,调用 Route::groupRoute::post 等方法定义路由时,Laravel 会从 groupStack 中取最后一个分组做为当前待追加的路由 / 分组的分组。

具体看: vendor/laravel/framework/src/Illuminate/Routing/Router.php:400

/**
    * Merge the given array with the last group stack.
    *
    * @param  array  $new
    * @return array
    */
public function mergeWithLastGroup($new)
{
    return RouteGroup::merge($new, end($this->groupStack));
}

其实也没有多绕,看这个 Router 类一步步看下来就明白了。

3年前 评论
讨论数量: 2

\Illuminate\Routing\Route 看这个类

3年前 评论
sudden3 (楼主) 3年前

在 6.x 版本中,调用 Route::groupRoute::post 等方法定义路由时,Laravel 会从 groupStack 中取最后一个分组做为当前待追加的路由 / 分组的分组。

具体看: vendor/laravel/framework/src/Illuminate/Routing/Router.php:400

/**
    * Merge the given array with the last group stack.
    *
    * @param  array  $new
    * @return array
    */
public function mergeWithLastGroup($new)
{
    return RouteGroup::merge($new, end($this->groupStack));
}

其实也没有多绕,看这个 Router 类一步步看下来就明白了。

3年前 评论