php artisan code,源码解读 Laravel PHP artisan config:cache
再来一篇源码解读系列,其实包含本篇 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相关推荐
- php artisan实现机制,源码解读:php artisan serve
在学习 Laravel 的时候,可能很多人接触的第一个 artisan 的命令就是:php artisan serve,这样我们就可以跑起第一个 Laravel 的应用.本文来尝试解读一下这个命令行的 ...
- Laravel php artisan optimize 源码解读
原文:https://www.codecasts.com/blo... 在部署 Laravel 项目的时候,我们经常会使用到一个提升性能的命令: php artisan optimize 本文来看看这 ...
- Laravel 源码解读:php artisan make:auth
学 Laravel 和 Vuejs,你真应该来 codecasts.com ,有免费高质量视频! 在 Laravel 5.2 的时候,官方给我们提供了 make:auth 命令,这个命令使得我们在执行 ...
- 【MMCV 源码解读】一、Config(配置文件相关)
目录 前言 一.通过dict生成config 1.1.字典对象实现属性访问 1.2.字典对象 pretty 输出 1.3.@property 二.通过配置文件生成 config 2.1.替换预定义变量 ...
- PyTorch 源码解读之即时编译篇
点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 作者丨OpenMMLab 来源丨https://zhuanlan.zhihu.com/ ...
- Feflow 源码解读
Feflow 源码解读 Feflow(Front-end flow)是腾讯IVWEB团队的前端工程化解决方案,致力于改善多类型项目的开发流程中的规范和非业务相关的问题,可以让开发者将绝大部分精力集中在 ...
- jdk1.8.0_45源码解读——Map接口和AbstractMap抽象类的实现
jdk1.8.0_45源码解读--Map接口和AbstractMap抽象类的实现 一. Map架构 如上图: (01) Map 是映射接口,Map中存储的内容是键值对(key-value). (02) ...
- Java Review - PriorityQueue源码解读
文章目录 Pre PriorityQueue 概述 PriorityQueue 继承关系 PriorityQueue通过用数组表示的小顶堆实现 时间复杂度 构造函数 方法 add()和offer() ...
- Java Review - LinkedList源码解读
文章目录 Pre 概述 底层数据结构-双向链表 源码解析 构造函数 方法源码分析 getFirst() getLast() remove相关方法 remove(e) remove(index) rem ...
最新文章
- 关于iview、element-ui重置表单并清除校验的方法
- $bzoj1060-ZJOI2007$ 时态同步 贪心 树形$dp$
- HDFS的namenode和datanode
- Python数据结构与算法(1.7)——算法分析
- ajax与easyui树节点,easyUI 树形列表 想实现 类似于according 的效果 怎么办?
- linux最小化连接开放wifi,CentOS最小化安装后启用无线连接网络
- 文本匹配工具正式开源
- 基于微信小程序电影购选系统
- matlab-高数 diff 二阶偏导数
- 计算机图形学(六)-光栅化、采样、走样与反走样、滤波与卷积
- 《让子弹飞》系列——彩蛋之“城南两大家族”
- 中继链路trunk详解
- Python-IO编程和异常
- C语言 编写函数Fun1实现分段函数运算,并返回函数值。在主函数调用Fun1函数,接收输入的x值,并输出函数值。
- python获取星期几_如何在Python中获取日期的星期几?
- 关于一汽大众的车型底盘号
- 【我的成长之路——英语】——good luck charlie
- 智微智能深交所上市:市值60亿 袁微微夫妇身价超40亿
- 明日方舟公式计算机,明日方舟公开招募计算器怎么用 公开招募计算工具分享...
- php gearman 定时任务,php使用gearman进行任务分发操作实例详解