Yii2怎么覆盖vendor中的库文件

首先我们要了 解一下 Yii 自动加载类的机制

我们打开一个web应用的入口文件Index.php 

// 这个是第三方的autoloader
require(__DIR__ . '/../../vendor/autoload.php');

// 这个是Yii的Autoloader,放在最后面,确保其插入的autoloader会放在最前面
require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php');

打开 Yii.php 

require(__DIR__ . '/BaseYii.php');  //这里autoload方法 就是读取映射表 classes.php

// 重点看这个 spl_autoload_register
spl_autoload_register(['Yii', 'autoload'], true, true);

// 下面的语句读取了一个映射表
Yii::$classMap = include(__DIR__ . '/classes.php');

打开 classes.php

return [
  'yii\base\Action' => YII2_PATH . '/base/Action.php',
  'yii\base\ActionEvent' => YII2_PATH . '/base/ActionEvent.php',

  ... ...

  'yii\widgets\PjaxAsset' => YII2_PATH . '/widgets/PjaxAsset.php',
  'yii\widgets\Spaceless' => YII2_PATH . '/widgets/Spaceless.php',];

这映射表,key是含空间名的类名,value是 文件位置


讲到这里基本就明白了,那么我们知道vendor第三方库的文件是不建议修改的(git一般忽略提交的),那如果要修改,就需要我们在项目文件夹创建文件覆盖vendor库的文件,按照上面Yii自动加载类的原理,我们需要如下截胡。

继续阅读

更多内容请付费阅读

评论区
登陆 后评论!