再来一篇源码解读系列,其实包含本篇 config:cache 源码解读在内,这三篇的源码解读都是跟线上环境部署 Laravel 项目有关,因为我们通常会使用这三个 artisan 命令来提高项目的执行效率。所以,我们进入正题:php artisan config:cache 源码解读

源码在哪

首先,我们还是可以使用编辑器的搜索功能搜 ConfigCacheCommand,这样就可以直接打开 config:cache 命令的源代码了,位于 Illuminate\Foundation\Console\ConfigCacheCommand 中,关键的代码还是位于 fire() 方法中:

public function fire(){

$this->call('config:clear');

// other codes

}

首先,在执行 php artisan config:cache 之前,我们需要将之前缓存过的配置文件清除,就是通过 $this->call('config:clear'); 这一行代码来实现的。

那,config:clear 的源码在哪呢?

这个命令的源码位于 Illuminate\Foundation\Console\ConfigClearCommand 中,你依然是可以在编辑器搜 ConfigClearCommand,然后定位到这里的 fire() 方法里面:

public function fire(){

$this->files->delete($this->laravel->getCachedConfigPath());

$this->info('Configuration cache cleared!');

}

你看,这里的代码就非常简单,主要就是删除原来缓存的配置文件,这个缓存的配置文件通过getCachedConfigPath() 获取到,这个 getCachedConfigPath() 在 Illuminate\Foundation\Application 中:

public function getCachedConfigPath(){

return $this->bootstrapPath().'/cache/config.php';

}

熟悉了吧,它也是放到 bootstrap/cache/ 目录下面的,命名为 config.php。

那么以上就删除完缓存的配置了,然后我们再次回到 config:cache 中。既然旧的缓存已经删除,那么我们就需要生成新的缓存文件了,所以再次聚焦 ConfigCacheCommand 的 fire() 方法:

public function fire(){

$config = $this->getFreshConfiguration();

$this->files->put(

$this->laravel->getCachedConfigPath(), '<?php return '.var_export($config, true).';'.PHP_EOL

);

}

首先 通过 getFreshConfiguration() 获取所有新的配置信息,这部分的代码逻辑就在 ConfigCacheCommand 中:

protected function getFreshConfiguration(){

$app = require $this->laravel->bootstrapPath().'/app.php';

$app->make(ConsoleKernelContract::class)->bootstrap();

return $app['config']->all();

}

这三行代码很简单,就是生成了一个 Laravel 的 Application 实例,然后通过 $app['config']->all() 获取所有的配置信息。

获取配置信息之后,就把新的配置信息写入缓存中,上面 ConfigCacheCommand fire() 方法的这一行实现:

$this->files->put(

$this->laravel->getCachedConfigPath(),

'<?php return '.var_export($config, true).';'.PHP_EOL

);

getCachedConfigPath() 已经很熟悉啦,在讨论 cache:clear 时我们就知道,其实就是获取到 bootstrap/cache/config.php 文件,然后写入配置的内容 var_export($config, true),所以最后缓存的配置文件大概的内容是这样的:

最后

有了缓存的配置文件,下次访问 Laravel 项目的时候就是直接读取缓存的配置了,而不用再次去计算和获取新的配置,这样来说,速度依然会快那么一点点。

记得关注 codecasts 公众号,定期送书,送福利

本作品采用《CC 协议》,转载必须注明作者和本文链接

php artisan code,源码解读 Laravel PHP artisan config:cache相关推荐

  1. php artisan实现机制,源码解读:php artisan serve

    在学习 Laravel 的时候,可能很多人接触的第一个 artisan 的命令就是:php artisan serve,这样我们就可以跑起第一个 Laravel 的应用.本文来尝试解读一下这个命令行的 ...

  2. Laravel php artisan optimize 源码解读

    原文:https://www.codecasts.com/blo... 在部署 Laravel 项目的时候,我们经常会使用到一个提升性能的命令: php artisan optimize 本文来看看这 ...

  3. Laravel 源码解读:php artisan make:auth

    学 Laravel 和 Vuejs,你真应该来 codecasts.com ,有免费高质量视频! 在 Laravel 5.2 的时候,官方给我们提供了 make:auth 命令,这个命令使得我们在执行 ...

  4. 【MMCV 源码解读】一、Config(配置文件相关)

    目录 前言 一.通过dict生成config 1.1.字典对象实现属性访问 1.2.字典对象 pretty 输出 1.3.@property 二.通过配置文件生成 config 2.1.替换预定义变量 ...

  5. PyTorch 源码解读之即时编译篇

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者丨OpenMMLab 来源丨https://zhuanlan.zhihu.com/ ...

  6. Feflow 源码解读

    Feflow 源码解读 Feflow(Front-end flow)是腾讯IVWEB团队的前端工程化解决方案,致力于改善多类型项目的开发流程中的规范和非业务相关的问题,可以让开发者将绝大部分精力集中在 ...

  7. jdk1.8.0_45源码解读——Map接口和AbstractMap抽象类的实现

    jdk1.8.0_45源码解读--Map接口和AbstractMap抽象类的实现 一. Map架构 如上图: (01) Map 是映射接口,Map中存储的内容是键值对(key-value). (02) ...

  8. Java Review - PriorityQueue源码解读

    文章目录 Pre PriorityQueue 概述 PriorityQueue 继承关系 PriorityQueue通过用数组表示的小顶堆实现 时间复杂度 构造函数 方法 add()和offer() ...

  9. Java Review - LinkedList源码解读

    文章目录 Pre 概述 底层数据结构-双向链表 源码解析 构造函数 方法源码分析 getFirst() getLast() remove相关方法 remove(e) remove(index) rem ...

最新文章

  1. 关于iview、element-ui重置表单并清除校验的方法
  2. $bzoj1060-ZJOI2007$ 时态同步 贪心 树形$dp$
  3. HDFS的namenode和datanode
  4. Python数据结构与算法(1.7)——算法分析
  5. ajax与easyui树节点,easyUI 树形列表 想实现 类似于according 的效果 怎么办?
  6. linux最小化连接开放wifi,CentOS最小化安装后启用无线连接网络
  7. 文本匹配工具正式开源
  8. 基于微信小程序电影购选系统
  9. matlab-高数 diff 二阶偏导数
  10. 计算机图形学(六)-光栅化、采样、走样与反走样、滤波与卷积
  11. 《让子弹飞》系列——彩蛋之“城南两大家族”
  12. 中继链路trunk详解
  13. Python-IO编程和异常
  14. C语言 编写函数Fun1实现分段函数运算,并返回函数值。在主函数调用Fun1函数,接收输入的x值,并输出函数值。
  15. python获取星期几_如何在Python中获取日期的星期几?
  16. 关于一汽大众的车型底盘号
  17. 【我的成长之路——英语】——good luck charlie
  18. 智微智能深交所上市:市值60亿 袁微微夫妇身价超40亿
  19. 明日方舟公式计算机,明日方舟公开招募计算器怎么用 公开招募计算工具分享...
  20. php gearman 定时任务,php使用gearman进行任务分发操作实例详解

热门文章

  1. 基于lucene的案例开发:纵横小说简介页采集
  2. 文档中的文字太紧凑,word行间距怎么调整?
  3. 阿里云ECS Ssh登录 密码栏灰色 密钥登录不上,VNC login incorrect解决
  4. LATEX公式行间距调整
  5. 电脑关机一段时间后不能网络唤醒WOL
  6. ES部署报错 max file size 和 kibana 报错File size limit exceeded
  7. CET-4 week7 融会贯通
  8. 主板的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  9. 高考真的能改变命运吗?
  10. 达观数据智能对公审贷系统,深化上海银行普惠金融、供应链金融科技创新