Fecshop 配置结构
Fecshop 配置结构
fecshop 配置结构是层级覆盖的方式,通过yii2的
yii\helpers\ArrayHelper::merge()
函数
将所有的配置进行合并,最终成为一个大数组。配置结构通过层级覆盖的方式可以很方便的对fecshop的功能进行重写
配置文件以及优先级
1.fecshop合并的配置文件:
fecshop配置是根据优先级,优先级高的配置可以覆盖优先级低的配置, 优先级由低到高的排列如下(其实就是index.php中的代码):
$config = yii\helpers\ArrayHelper::merge(
require(__DIR__ . '/../../common/config/main.php'),
require(__DIR__ . '/../../common/config/main-local.php'),
require(__DIR__ . '/../config/main.php'),
require(__DIR__ . '/../config/main-local.php'),
# fecshop services config
require(__DIR__ . '/../../vendor/fancyecommerce/fecshop/config/fecshop.php'),
# fecshop module config
require(__DIR__ . '/../../vendor/fancyecommerce/fecshop/app/appfront/config/appfront.php'),
# thrid part confing
# common modules and services.
require(__DIR__ . '/../../common/config/fecshop_local.php'),
# appadmin local modules and services.
require(__DIR__ . '/../config/fecshop_local.php')
);
1到4,是Yii2框架的配置文件结构:
1.@common/config/main.php
# Yii2 公用配置,一般是Yii2的一些组件的公用配置。
2.@common/config/main-local.php
# Yii2 本地公用配置,一般是Yii2的一些数据库组件的配置
3.@app/config/main.php
# Yii2 本app内的配置
4.@app/config/main-local.php
# Yii2 本app内的本地配置
5和6部分,是fecshop的配置文件结构:
5.@vendor/fancyecommerce/fecshop/config/fecshop.php
# Fecshop的公用配置,一般是组件和服务的配置。
6.@vendor/fancyecommerce/fecshop/app/appfront/config/appfront.php
# Fecshop appfront这个入口的独有配置,里面包含模块和一些组件的配置。
第7部分为第三方开发的扩展的配置引入部分,您使用的第三方插件的配置,可以在这里引入进来。
7.第三方配置文件地址。
8和9部分,是二次开发者的配置文件部分:
8.@common/config/fecshop_local.php
# 二次开发者的各个入口的公用配置
9.@app/config/fecshop_local.php
# 二次开发者的当前入口的独有配置
上面8个配置文件的内容,通过yii\helpers\ArrayHelper::merge()
函数合并,最后
形成一个数组,在合并的过程中,1的优先级最低,8个优先级最高,优先级高的配置
项可以覆盖优先级低的配置项。
覆盖顺序:
1.fecshop(5-6)可以覆盖前面Yii2的配置项(1-4)
2.第三方扩展(7),可以覆盖fecshop的配置项(1-6)
3.二次开发者(8-9)可以覆盖上面所有的配置(1-7)
2.对于运费的配置,是通过csv的方式存储公式,路径为
@common/config/shipping/fast_shipping.csv
3.yii class map重写机制
$yiiClassMap = require(__DIR__ . '/../config/YiiClassMap.php');
if(is_array($yiiClassMap) && !empty($yiiClassMap)){
foreach($yiiClassMap as $namespace => $filePath){
Yii::$classMap[$namespace] = $filePath;
}
}
通过classMap的配置,可以重写任意一个class文件,譬如
<?php
return [
'fecshop\app\appfront\helper\test\My' => '@appfront/helper/My.php',
];
具体使用方法参看文章:通过配置的方式重写某个Yii2 文件 或第三方扩展文件
优先级部分配置细化 - yii\helpers\ArrayHelper::merge()部分
上面的9个配置文件,有的配置文件还包含其他的配置文件,下面逐一列举
1.@vendor/fancyecommerce/fecshop/config/fecshop.php
该配置文件包含:
1.1@vendor/fancyecommerce/fecshop/config/services/*.php
,这个文件夹下面所有的php配置文件,这里面是各个Fecshop Services(服务)的配置
1.2@vendor/fancyecommerce/fecshop/config/components/*.php
,这个文件夹下面的所有的php文件,这里面是各个Fecshop Component(组件)的配置
2.@vendor/fancyecommerce/fecshop/app/appfront/config/appfront.php
该配置文件包含:
2.1@vendor/fancyecommerce/fecshop/app/appfront/config/params.php
这里面是一些参数的默认配置。
2.2@vendor/fancyecommerce/fecshop/app/appfront/config/modules/*.php
这个文件夹下面所有的php配置文件,这里面是各个模块对应的配置
3.@common/config/fecshop_local.php
该配置文件包含:
3.1@common/config/fecshop_local_modules/*.php
这个文件夹下面所有的php配置文件,这里面是二次开发的公用部分,添加或重写的
模块方面的配置
3.2@common/config/fecshop_local_services/*.php
这个文件夹下面所有的php配置文件,这里面是二次开发的公用部分,添加或重写的
服务方面的配置
4.@app/config/fecshop_local.php
该配置文件包含:
4.1@app/config/fecshop_local_modules/*.php
这个文件夹下面所有的php配置文件,这里面是二次开发的公用部分,添加或重写的
模块方面的配置
4.2@app/config/fecshop_local_services/*.php
这个文件夹下面所有的php配置文件,这里面是二次开发的公用部分,添加或重写的
服务方面的配置
一开始说的9个配置文件,以及对应的这些细分的配置文件,共同组合起来合并,形成 fecshop的最终配置。
通过配置项的覆盖,我们就可以重写各个组件,服务等功能,二次开发自己的功能。
配置加速
配置文件的合并是在index.php文件中, 为了加速,您可以把合并后的数组放到缓存中,然后直接读取出来,节省数据合并带来的开销。 如果您更新了配置,您需要刷新一下缓存让更新的配置生效。
更多建议: