laravel(源码笔记) 路由注册,加载,寻址,参数绑定过程

路由

  1. Application __construct 注册路由到服务容器
    1. setBasePath
    2. registerBaseBindings
    3. registerBaseServiceProviders
      1. EventServiceProvider
      2. LogServiceProvider
      3. RoutingServiceProvider
        1. registerRouter
    4. registerCoreContainerAliases
  2. 加载路由文件
    1. App\Providers\RouteServiceProvider
      1. boot
        1. Illuminate\Foundation\Support\Providers
          1. boot
          2. routesAreCached 获取缓存
            1. $this[‘files’]查找是否存在文件
              1. getCachedRoutesPath
              2. $this->bootstrapPath().‘/cache/routes.php’;
          3. 存在则加载缓存文件 loadCachedRoutes
          4. 不存在则加载路由,并且调用loadRoutes函数,loadRoutes会调用App\Providers\RouteServiceProvider的map方法来将路由名和路由行为循环刷新方法加入到启动回到中待启动后执行。
      2. map
      3. mapApiRoutes,mapWebRoutes,调用web,api两个路由:router/web.php,router/api.php
    2. 路由注册
      1. 各种方法,都是调用:addRoute
      2. createRoute 创建路由
        1. 对controller@action转换为’name’=>controller@action convertToControllerAction
        2. 创建新路由
          1. 设置路由
          2. 设置容器
        3. 是否有分组前缀,有则执行合并分组属性到路由
        4. 加上条件闭包回调到路由
        5. 返回路由
      3. 添加路由到 RouteCollection
        1. add
        2. addToCollections
          1. 循环添加到 t h i s − > r o u t e s [ this->routes[ this>routes[method][$domainAndUri] 二维数组路由 ‘GET’ => [ $routeUri1 => $routerA ]
          2. 添加到 t h i s − > a l l R o u t e s [ this->allRoutes[ this>allRoutes[method.$domainAndUri] 二维数组转为一维数组的路由 ‘GET’ . $routeUri1 => $routerA
        3. addLookups
          1. 添加别名到命名空间$nameList中方便查找 $routeName1 => $routeA
          2. 设置了控制器,则添加到行为列表$actionList查找 ‘Controller@action’ => $routeA
        4. 返回路由
    3. 路由寻址 RouteCollection
      1. sendRequestThroughRouter
        1. dispatchToRouter
          1. Router/dispatch
            1. dispatchToRoute
              1. findRoute
              2. match
                1. 匹配路由 找到第一个
                  1. compileRoute 解析路由: 将路由规则转换成正则表达式
                  2. 循环执行每个验证器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习中的随机种子random_seed

解释 由于模型中的参数初始化例如权重参数如下图,就是随机初始化的,为了能够更好的得到论文中提到效果,可以设置随机种子,从而减少算法结果的随机性,使其接近于原始结果。 设置了随机种子,产生的随机数都…

基于Java中的SSM框架实现考研指导平台系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现考研指导平台系统演示 摘要 应对考研的学生,为了更好的使校园考研有一个更好的环境好好的学习,建议一个好的校园网站,是非常有必要的。提供学生的学习提供一个交流的空间。帮助同学们在学习高数、学习设计、学习统计…

Docker搭建LNMP环境实战(一):前言

缘起:不久前学习了Docker相关知识,并在Docker环境下学习了LNMP环境的搭建。由于网上的文章大多没有翔实、可行的案例,很多文章都是断章取义,所以,期间踩了太多太多的坑,初学者想要真正顺利地搭建一套环境起…

数值代数中的灵敏度分析【条件数】

文章目录 一、条件数二、解线性方程组问题的条件数 在数值分析领域,灵敏度分析是一种用来评估数值模型对输入参数变化的敏感程度的技术。它在许多科学和工程领域中都有广泛的应用,包括金融、工程设计、自然资源管理等。 一、条件数 一个实际问题化为数…

基于python+vue的ITS 信息平台的设计与实现flask-django-nodejs-php

伴随着我国社会的发展,人民生活质量日益提高。于是对系统进行规范而严格是十分有必要的,所以许许多多的信息管理系统应运而生。此时单靠人力应对这些事务就显得有些力不从心了。所以本论文将设计一套信息平台,帮助交通局进行信息共享、交通信…

Android设计模式

在Android应用开发中,设计模式是非常重要的一部分,它们提供了一种标准化的方式来解决常见的软件设计问题,提高代码的可读性、可维护性和复用性。以下是一些在Android开发中常见和实用的设计模式分类: ### 创建型模式(…

【Spring框架】单元测试:JUnit

个人名片: 🐼作者简介:一名大三在校生,喜欢AI编程🎋 🐻‍❄️个人主页🥇:落798. 🐼个人WeChat:hmmwx53 🕊️系列专栏:🖼️…

使用 Pytorch 和 Rasterio 的自定义地理空间数据加载器

地理空间数据在从遥感和城市规划到环境监测和灾害管理的各个领域发挥着至关重要的作用。在处理机器学习任务的地理空间数据时,准备自定义数据加载器对于有效加载、预处理和增强数据而不丢失其属性至关重要,特别是当输入图像具有超过 3 个波段时。 Rasterio确实是一个专门为有…

2核2G服务器阿里云多少钱一年?

阿里云2核2G服务器配置优惠价格61元一年和99元一年,61元是轻量应用服务器2核2G3M带宽、50G高效云盘;99元服务器是ECS云服务器经济型e实例ecs.e-c1m1.large,2核2G、3M固定带宽、40G ESSD entry系统盘,阿里云活动链接 aliyunfuwuqi.…

Gavin Wood 精彩演讲|安全灵活 JAM 链,打造去中心化多核计算机

Polkadot 年度开发者大会 sub0 Asia 近期在泰国曼谷正式落幕。面对区块链行业的激烈竞争,Polkadot 创始人 Gavin Wood 在演讲中说明将如何利用 Polkadot 2.0 与 JAM 链带来新的技术创新,推动生态持续发展。 Polkadot 将推一个名为 JAM 链的新网络。JAM …

单机模拟分布式MINIO(阿里云)

拉取的最新MINIO: minio version RELEASE.2024-03-15T01-07-19Z Runtime: go1.21.8 linux/amd64 分布式 MinIO 至少需要4个节点,也就意味着至少4个硬盘,对于囊中羞涩仅用来开发测试的人来说,这笔花销还是比较高昂。有没有更好的…

Day61:WEB攻防-PHP反序列化原生类TIPSCVE绕过漏洞属性类型特征

知识点: 1、PHP-反序列化-属性类型&显示特征 2、PHP-反序列化-CVE绕过&字符串逃逸 3、PHP-反序列化-原生类生成&利用&配合 补充:如果在 PHP 类中没有实现某个魔术方法,那么该魔术方法在相应的情况下不会被自动触发。PHP 的魔…

Oracle 11G备份集中控制文件和spfile被异常删除

坐标大理,苍山下,洱海旁,风花雪月!! 今日一大早就接到一个case,根据客户描述,大概意思是昨天晚上发现18号的ctl和spfile无故消失,备份策略是一周一个0级增量备份,每日进…

Promise和事件轮询

Promise和事件轮询 今日目标: 1.Promise 要求:能够清楚的说出Promise的特性和静态方法 2.事件轮询 要求:能够理解清楚同步和异步在底层的实现机制 00-回顾 # ajax概述 async javascript and xml: 异步的js和xml作用: 实现客…

python数据容器--集合

什么是集合 列表可以修改,支持重复元素且有序 元组、字符串不可修改,支持重复元素且有序 集合无序,不可重复 定义一个集合 #去重,且无序 #集合无序因此不支持下标访问 #但集合和列表一样,是允许修改的 my_set{&quo…

机器学习——线性回归(头歌实训)

头歌机器学习实训代码、答案,如果能够帮到您,希望可以点个赞!!! 如果有问题可以csdn私聊或评论!!!感谢您的支持 目录 第1关:简单线性回归与多元线性回归 第2关&#…

JVM加类加载器

文章目录 JVM内存模型内存分配策略JVM内存分配策略优化的最佳实践对象头类加载类加载器有哪几种?如何实现一个自定义类加载器?类加载机制如何影响性能调优? JVM内存模型 JVM(Java虚拟机)内存模型描述了Java虚拟机在执…

矩阵理论的概念间的组合关系的公式

矩阵理论的概念间的组合关系的公式 现在很火执的人工智能技术,要求很高的数学基础知识。 除了微积分就是线性代数的内容了。自动微分框架是人工 智能技术的底层框架。其实就是实现了微积分的各种函数 的微积分运算而矣。线性代数的内容应用于计算机 的软件中的各个…

Elasticsearch 的 scroll API

对于大量数据,可以使用 Elasticsearch 的 scroll API 来分批次地读取数据,以避免一次性读取所有数据造成的内存负担。这段代码使用滚动查询(scroll)来分批次地读取数据。首先,它发送初始的搜索请求,并获取第…

Vue3:网页项目中路由的设计和配置

为了避免我每次建项目配路由的时候都回去翻网课,打算整一博客 路由设计 不同网页的路由设计思路基本相同,分为一级路由和二级路由,基本设计思路如下图 以我之前做过的招新系统管理端为例,可设计出如下路由 路由配置 还是以招新系…