美文网首页
Laravel从开始到结束都经过了哪些步骤

Laravel从开始到结束都经过了哪些步骤

作者: lifefruity | 来源:发表于2019-07-12 23:08 被阅读0次

最近在看laravel的源码,下面的就当是个笔记,会记录一下从代码的第一行到结束都经历了什么。

  • Illuminate\Routing\Router.php下findRoute()做了什么
protected function findRoute($request)
{
    $this->current = $route = $this->routes->match($request);

    $this->container->instance(Route::class, $route);

    return $route;
}

这个方法里通过传入的request请求,返回当前的一个route实例,主要通过当前url,返回当前用的是哪个controller,或者是个function。那么它又是如何把request和路由对应起来的呢?

回答这个问题先要看上面的match方法是如何运行的,调用的是Illuminate\Routing\RouteCollection中的match方法。

public function match(Request $request)
{
    $routes = $this->get($request->getMethod());//这里能获取所有的uri
    $route = $this->matchAgainstRoutes($routes, $request);//通过所有链接与当前的url进行匹配
}

public function get($method = null)
{
    return is_null($method) ? $this->getRoutes() : Arr::get($this->routes, $method, []);//$this->routes所有的路由
}

在这个小节里主要看是怎么往$this->routes赋值的

那么这其中的过程是怎么样的呢?其实在项目的启动时候会加载routes下的文件,比如web.php,可以参考这篇文章,在这里说明了web.php是如何加载的。在这个文件中

Route::get('/rose', function () {
    return view('welcome');
});

运行了Route::get()方法,其实没有这个静态方法,而是运行了Illuminate\Routing\Router中的get方法,可以参考这篇文章

//Illuminate\Routing\Router
public function __construct(Dispatcher $events, Container $container = null)
{
    $this->events = $events;
    $this->routes = new RouteCollection;
    $this->container = $container ?: new Container;
}

public function get($uri, $action = null)
{
    return $this->addRoute(['GET', 'HEAD'], $uri, $action);
}

public function addRoute($methods, $uri, $action)
{
    return $this->routes->add($this->createRoute($methods, $uri, $action));//上面实例的类是RouteCollection
}

//Illuminate\Routing\RouteCollection
public function add(Route $route)
{
    $this->addToCollections($route);
    $this->addLookups($route);
    return $route;
}

protected function addToCollections($route)
{
    $domainAndUri = $route->getDomain().$route->uri();

    foreach ($route->methods() as $method) {
        $this->routes[$method][$domainAndUri] = $route;//在这里保存了所有的路由 !!!!!!!!!!!!!!!!!
    }

    $this->allRoutes[$method.$domainAndUri] = $route;
}

这里因为加载了每个路由文件,所以能收集到所有的uri,把它们放到$this->routes中去,也就解决了上面的疑问。

未完待续...

相关文章

  • Laravel从开始到结束都经过了哪些步骤

    最近在看laravel的源码,下面的就当是个笔记,会记录一下从代码的第一行到结束都经历了什么。 Illuminat...

  • 从开始到结束.

    乌斯怀亚,世界尽头。它是世界最南端的城市,这座灯塔也是离南极洲最近的。这里是世界的尽头也是新的开始。 2017年 ...

  • 从开始到结束

    难道我的吻注定吻不到最爱的人,难道我就这样过我的一生。 每次听张信哲的这首歌,我就想起老陈和小瑾。这个世界上,如果...

  • 从开始到结束

    从开始的失意 到后来的偶尔想起 连自己都以为是 快要走出那段痛苦的回忆 思恋一旦开启 原本忘记的就越发清晰 清晰的...

  • 从结束到开始

    辞职快两个月,玩也玩了,休息也休息了,国庆前找到工作的计划以为无法达成,机会出现在拐角处,我是幸运的,一定也是好命...

  • 从开始到结束

    By 四两-我的思念,你看得见。 -1- 外公没等我考上大学,就走了。 印象中,参加的葬礼都在雨天。那天,也下着小...

  • 从开始到结束

    时间,真是个好东西。就像现在离不开的酒,和抽习惯的烟。过程总是不舒服的,但到最后一口咽下去的时候,心里只有一个字,...

  • 从开始到结束

    《从开始到结束》 有一种相遇,叫一见钟情。 有一种缘分,叫前世注定。 有一种喜欢,叫真心真意。 有一种关心,叫万...

  • 从开始到结束

    从3月3号报到,晚上开始摸底测试,到3月29日结课。26天的密闭培训,说长不长;说短,确实也是对自己的一次挑...

  • 从开始到结束

    最后一个晚自习,是班主任的陪伴。要交代的太多,有考试的注意事项,有人生路的叮嘱,有祝福和不舍。 晚自习,九点,我说...

网友评论

      本文标题:Laravel从开始到结束都经过了哪些步骤

      本文链接:https://www.haomeiwen.com/subject/pljukctx.html