服务提供者
- 自定义服务,第三方资源,核心服务,通过服务提供者进行注册和引导。
- 基本
- register,绑定实例,注册到服务容器
- provides,导出provide实例
- 实例化app,解析处kernel对象,引导bootstrap(重点),kernel处理请求,进入中间件,最后返送请求给路由毒药的控制器方法
- 检查环境
- 加载应用配置
- 配置日志
- 注册异常处理回调
- 注册Facades
- 注册Providers
- 启动Providers
- providers
- $kernel->handle
- sendRequestThroughRouter
- bootstrap(v)
- send
- middleware 是否跳过
- dispatchToRouter
- bootstrapWith
- t h i s − > m a k e ( this->make( this−>make(bootstrapper)->bootstrap($this);
- RegisterProviders bootstrap
- Application registerConfiguredProviders
- getCachedServicesPath $this->bootstrapPath().'/cache/services.php' 生成服务文件
- ProviderRepository load
- loadManifest()会加载服务提供器缓存文件services.php
- shouldRecompile 缓存的service.php文件里面的providers和config.php/app.php内的providers不一致就会导致重新编译
- compileManifest
- freshManifest
- 创建provider实例
- 是否延迟加载
- 是,将实例作为键,提供者作为值存入缓存文件的deferred数组中。有事件则入栈到事件when数组中
- 否,直接入栈eager数组
- 将$manifest写入缓存文件
- 事件触发时注册延迟服务提供器 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)
- 即时注册服务提供器 register
- 非强制,获取提供者返回(已经注册过)
- 字符串,解析提供者
- 对象,存在register方法,执行register
- 标记提供者已经注册,入栈服务提供者数组,设置该提供者已经注册完毕
- 是否需要引导,需要则启动引导,执行provider的boot
- 返回提供者
- 服务解析时注册延迟服务提供器 addDeferredServices
- app make 过程。
- 是否在 deferredServices,是则 loadDeferredProvider
- loadDeferredProvider 是否已经加载过,没有则注册
- registerDeferredProvider
- 删除 deferredServices 对应的provider
- 框架还未启动,放入等待启动的回调函数中,等待服务启动时调用。
- registerDeferredProvider
- loadDeferredProvider 是否已经加载过,没有则注册
- 是否在 deferredServices,是则 loadDeferredProvider
- 启动application
- BootProviders
- 执行启动前hook
- bootProvider 执行boot
- 标记已经启动
- 执行启动后hook
- BootProviders