laravel(源码笔记)服务提供者执行过程

服务提供者

  1. 自定义服务,第三方资源,核心服务,通过服务提供者进行注册和引导。
  2. 基本
    1. register,绑定实例,注册到服务容器
    2. provides,导出provide实例
  3. 实例化app,解析处kernel对象,引导bootstrap(重点),kernel处理请求,进入中间件,最后返送请求给路由毒药的控制器方法
    1. 检查环境
    2. 加载应用配置
    3. 配置日志
    4. 注册异常处理回调
    5. 注册Facades
    6. 注册Providers
    7. 启动Providers
  4. providers
    1. $kernel->handle
    2. sendRequestThroughRouter
      1. bootstrap(v)
      2. send
      3. middleware 是否跳过
      4. dispatchToRouter
    3. bootstrapWith
    4. t h i s − > m a k e ( this->make( this−>make(bootstrapper)->bootstrap($this);
    5. RegisterProviders bootstrap
    6. Application registerConfiguredProviders
    7. getCachedServicesPath $this->bootstrapPath().'/cache/services.php' 生成服务文件
    8. ProviderRepository load
      1. loadManifest()会加载服务提供器缓存文件services.php
      2. shouldRecompile 缓存的service.php文件里面的providers和config.php/app.php内的providers不一致就会导致重新编译
      3. compileManifest
        1. freshManifest
        2. 创建provider实例
        3. 是否延迟加载
          1. 是,将实例作为键,提供者作为值存入缓存文件的deferred数组中。有事件则入栈到事件when数组中
          2. 否,直接入栈eager数组
        4. 将$manifest写入缓存文件
      4. 事件触发时注册延迟服务提供器 registerLoadEvents t h i s − > a p p − > m a k e ( ′ e v e n t s ′ ) − > l i s t e n ( this->app->make('events')->listen( this−>app−>make(′events′)−>listen(events, registerProviderActionClosure)
      5. 即时注册服务提供器 register
        1. 非强制,获取提供者返回(已经注册过)
        2. 字符串,解析提供者
        3. 对象,存在register方法,执行register
        4. 标记提供者已经注册,入栈服务提供者数组,设置该提供者已经注册完毕
        5. 是否需要引导,需要则启动引导,执行provider的boot
        6. 返回提供者
      6. 服务解析时注册延迟服务提供器 addDeferredServices
    9. app make 过程。
      1. 是否在 deferredServices,是则 loadDeferredProvider
        1. loadDeferredProvider 是否已经加载过,没有则注册
          1. registerDeferredProvider
            1. 删除 deferredServices 对应的provider
            2. 框架还未启动,放入等待启动的回调函数中,等待服务启动时调用。
    10. 启动application
      1. BootProviders
        1. 执行启动前hook
        2. bootProvider 执行boot
        3. 标记已经启动
        4. 执行启动后hook
相关推荐
林深时见鹿74914 小时前
使用k8s k3s kuboard 部署 php hyperf 框架
php
长城202414 小时前
从词源和输出生成等角度详细解析PHP中常用文件操作类函数
php·文件·函数·文件操作函数
长城202414 小时前
PHP如何使用JpGraph生成3D饼形图?
开发语言·php·jpgraph·3d饼形图
熬夜苦读学习21 小时前
Reactor 反应堆模式
运维·服务器·网络·网络协议·http·智能路由器·php
小森林821 小时前
分享一次Guzzlehttp上传批量图片优化的经历
后端·php
THMAIL1 天前
大模型0基础开发入门与实践:第11章 进阶:LangChain与外部工具调用
开发语言·langchain·php
分享点2 天前
Laravel 使用阿里云OSS S3 协议文件上传
阿里云·php·laravel
苏琢玉2 天前
订单号老是撞车?我写了个通用 PHP ID 生成器
php·composer
BingoGo2 天前
PHP 测试框架 Pest v4 正式发布 革命性的浏览器测试体验
后端·php
搬码临时工2 天前
通过自定义域名访问内网的web服务和tcp应用:内网ip到局域网外域名访问过程
服务器·tcp/ip·php