位置: 编程技术 - 正文

深入解析Laravel5.5中的包自动发现Package Auto Discovery

编辑:rootadmin

推荐整理分享深入解析Laravel5.5中的包自动发现Package Auto Discovery,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

在之前的 Laravel 版本中,安装包通常需要几个步骤,例如添加服务提供器到 app 配置文件并注册相关的 facades。现在,从 Laravel 5.5 开始,Laravel 可以自动检测并注册服务提供器和 facades。

本文不是聚焦于他是怎么用的,而是看看它的源码,是怎么实现Package Auto Discovery的。

composer.json

一切的起源都是来自 composer.json ,在使用 composer 的时候,你可以在 post-autoload-dump 部分指定你想执行的脚本,比如在 Laravel 5.5 的时候,我们可以看到这样的定义:

对于 postAutoloadDump 是很熟悉了,Laravel 之前的版本基本都有,它的工作是清理一些缓存,删除一些旧的文件。

我们的关注重点是@php artisan package:discover ,也就是会执行@php artisan package:discover 这个命令。

这个命令是干嘛的呢?它其实是位于IlluminateFoundationConsolePackageDiscoverCommand 中,主要是通过执行IlluminateFoundationPackageManifest 的 build() 方法来达到 发现 package 的目的。

深入解析Laravel5.5中的包自动发现Package Auto Discovery

而 PackageManifest 早就注册在 Laravel 的 Container 中,那么它可以保证每次在启动 Laravel 的时候都能使用 PackageManifest 的 build() 方法,这个 build() 方法主要的逻辑就是:

找寻 vendor/composer/installed.json 这个文件,这个文件是 composer 自己生成的,记录着每一次的 composer autoload 的 class map。

而此时,Laravel 又将这些内容映射到 extra.laravel 的部分,比如:

Laravel 首先将以上内容直接读取下来放到一个 collection 中,然后在去检查下面这个部分的定义,在决定是否需要执行 Package Discover 动作:

如果你不想执行 @php artisan package:discover 的发现效果,可以直接在 dont-discover 的数组里面填上 *。

这样判断完成之后,Laravel 将 collection 中需要发现的 Package 内容保存到一个缓存文件中bootstrap/cache/packages.php:

Laravel 怎么拿到 Package 信息?

这个时候,我们又需要看看 Laravel 项目启动的时候,主要启动下面的两个服务:

IlluminateFoundationBootstrapRegisterFacades IlluminateFoundationBootstrapRegisterProvider

而 上面的第一个服务会使用 IlluminateFoundationAliasLoader 加载所有的 alias ,在 AliasLoader 中:

你可以看到,它首先读取 app.php 的 aliases 数组,然后与 bootstrap/cache/packages.php 的 packages 数组合并,这个时候,就可以获取到所有的 packages 信息进行发现和自带加载了。这样合并的好处就是,你还是可以直接在 app.php中定义你的 alias 来覆盖自动发现的 package,从而保证你的项目还是可以运行得很流畅。

总结

本文将 Laravel 5.5 Package Auto Discovery 原理和源码梳理的一遍,希望对你了解 Laravel 5.5 Package Auto Discovery 有所帮助。

好了,

标签: 深入解析Laravel5.5中的包自动发现Package Auto Discovery

本文链接地址:https://www.jiuchutong.com/biancheng/288317.html 转载请保留说明!

上一篇:php生成条形码的图片的实例详解(php生成条形码的代码)

下一篇:ThinkPHP开发--使用七牛云储存(thinkphp6开发)

  • 增值税税负税率
  • 个人所得税退的多好还是少好
  • 财务报表和信息的区别
  • 免交的附加税需要计提吗
  • 一般纳税人拿到小规模的专票
  • 非营利组织需要纳税吗
  • 现金账记错了该如何改正
  • 企业零申报怎么申报
  • 公司给员工买房子
  • 政府奖励企业款银行未收到会计分录
  • 金融债券利息收入免企业所得税吗
  • 购买的专利可以进费用吗
  • 小规模纳税人按什么标准纳税
  • 出租房屋房产税怎么算
  • 收到个人缴纳的办证费
  • 没有实缴的公司法人风险大吗
  • 打包贷款和出口信贷的区别和联系
  • 确认预计负债的必要条件
  • 实收资本不到位后果
  • 配股条件是什么意思
  • 增值税 劳务费
  • 库存现金盘盈怎么做分录
  • php 代码生成
  • 项目提成比例
  • vue2动态路由
  • 企业租赁不动产税率
  • php数据库删除数据
  • 销售地下车库缴纳哪些税
  • 小规模纳税人免税政策2023年
  • 企业年度报告内容
  • 金蝶账无忧待遇和金蝶一样吗
  • ajax调用php接口
  • 前端开发软件哪个最好
  • 长期股权投资
  • loss for
  • html span标签作用
  • 增资会计
  • 电子税务局购票员变更
  • 原材料用于在建工程增值税如何处理
  • 小规模纳税人减免增值税会计处理
  • 企业商品库存周期是多久
  • 基本户发工资的规定
  • 个人所得税银行卡未实名认证是什么意思
  • 申报财务报表利润怎么写
  • 个人对公付款
  • 新会计准则规定
  • 帝国cms怎么样
  • 进项税认证抵扣流程
  • 小规模纳税人的个人所得税怎么算
  • 公司个人借款如何做账
  • 累计盈余的借方
  • 员工工资是哪个会计科目
  • 转让土地如何做会计分录
  • 企业应纳税所得额的计算原则
  • 一般纳税人公司开普票几个税点?
  • 用友软件操作流程图片
  • 出资入股是什么意思
  • 红字发票可以跨月入账吗
  • 互联网代记账业务
  • SQL语句查询数据量
  • 主板如何清除cmos
  • win7经典版怎么换回win10
  • hyper-v怎么样
  • WUSB54GS.exe - WUSB54GS是什么进程
  • xp系统硬盘管理
  • msng.exe病毒
  • propelac.exe - propelac是什么进程 有什么用
  • vivo渠道服容易被找回吗
  • 删除同步中心图标
  • 在linux操作系统中,/etc/rc.d/init.d
  • opencvsharp读取图片
  • python的判断
  • linux使用ssh远程连接服务器
  • 从零开始学什么技术
  • javascript数学函数
  • js验证正整数
  • 西安税务机关
  • 销售皮棉税率为多少
  • 船舶吨税税收优惠口诀
  • 零申报印花税的应税凭证名称怎么填写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设