fecshop 配置結(jié)構(gòu)是層級覆蓋的方式,通過yii2的
yii\helpers\ArrayHelper::merge()
函數(shù)
將所有的配置進(jìn)行合并,最終成為一個大數(shù)組。配置結(jié)構(gòu)通過層級覆蓋的方式可以很方便的對fecshop的功能進(jìn)行重寫
fecshop配置是根據(jù)優(yōu)先級,優(yōu)先級高的配置可以覆蓋優(yōu)先級低的配置, 優(yōu)先級由低到高的排列如下(其實就是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框架的配置文件結(jié)構(gòu):
1.@common/config/main.php
# Yii2 公用配置,一般是Yii2的一些組件的公用配置。
2.@common/config/main-local.php
# Yii2 本地公用配置,一般是Yii2的一些數(shù)據(jù)庫組件的配置
3.@app/config/main.php
# Yii2 本app內(nèi)的配置
4.@app/config/main-local.php
# Yii2 本app內(nèi)的本地配置
5和6部分,是fecshop的配置文件結(jié)構(gòu):
5.@vendor/fancyecommerce/fecshop/config/fecshop.php
# Fecshop的公用配置,一般是組件和服務(wù)的配置。
6.@vendor/fancyecommerce/fecshop/app/appfront/config/appfront.php
# Fecshop appfront這個入口的獨有配置,里面包含模塊和一些組件的配置。
第7部分為第三方開發(fā)的擴(kuò)展的配置引入部分,您使用的第三方插件的配置,可以在這里引入進(jìn)來。
7.第三方配置文件地址。
8和9部分,是二次開發(fā)者的配置文件部分:
8.@common/config/fecshop_local.php
# 二次開發(fā)者的各個入口的公用配置
9.@app/config/fecshop_local.php
# 二次開發(fā)者的當(dāng)前入口的獨有配置
上面8個配置文件的內(nèi)容,通過yii\helpers\ArrayHelper::merge()
函數(shù)合并,最后
形成一個數(shù)組,在合并的過程中,1的優(yōu)先級最低,8個優(yōu)先級最高,優(yōu)先級高的配置
項可以覆蓋優(yōu)先級低的配置項。
覆蓋順序:
1.fecshop(5-6)可以覆蓋前面Yii2的配置項(1-4)
2.第三方擴(kuò)展(7),可以覆蓋fecshop的配置項(1-6)
3.二次開發(fā)者(8-9)可以覆蓋上面所有的配置(1-7)
@common/config/shipping/fast_shipping.csv
$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 文件 或第三方擴(kuò)展文件
上面的9個配置文件,有的配置文件還包含其他的配置文件,下面逐一列舉
@vendor/fancyecommerce/fecshop/config/fecshop.php
該配置文件包含:
1.1@vendor/fancyecommerce/fecshop/config/services/*.php
,這個文件夾下面所有的php配置文件,這里面是各個Fecshop Services(服務(wù))的配置
1.2@vendor/fancyecommerce/fecshop/config/components/*.php
,這個文件夾下面的所有的php文件,這里面是各個Fecshop Component(組件)的配置
@vendor/fancyecommerce/fecshop/app/appfront/config/appfront.php
該配置文件包含:
2.1@vendor/fancyecommerce/fecshop/app/appfront/config/params.php
這里面是一些參數(shù)的默認(rèn)配置。
2.2@vendor/fancyecommerce/fecshop/app/appfront/config/modules/*.php
這個文件夾下面所有的php配置文件,這里面是各個模塊對應(yīng)的配置
@common/config/fecshop_local.php
該配置文件包含:
3.1@common/config/fecshop_local_modules/*.php
這個文件夾下面所有的php配置文件,這里面是二次開發(fā)的公用部分,添加或重寫的
模塊方面的配置
3.2@common/config/fecshop_local_services/*.php
這個文件夾下面所有的php配置文件,這里面是二次開發(fā)的公用部分,添加或重寫的
服務(wù)方面的配置
4.@app/config/fecshop_local.php
該配置文件包含:
4.1@app/config/fecshop_local_modules/*.php
這個文件夾下面所有的php配置文件,這里面是二次開發(fā)的公用部分,添加或重寫的
模塊方面的配置
4.2@app/config/fecshop_local_services/*.php
這個文件夾下面所有的php配置文件,這里面是二次開發(fā)的公用部分,添加或重寫的
服務(wù)方面的配置
一開始說的9個配置文件,以及對應(yīng)的這些細(xì)分的配置文件,共同組合起來合并,形成 fecshop的最終配置。
通過配置項的覆蓋,我們就可以重寫各個組件,服務(wù)等功能,二次開發(fā)自己的功能。
配置文件的合并是在index.php文件中, 為了加速,您可以把合并后的數(shù)組放到緩存中,然后直接讀取出來,節(jié)省數(shù)據(jù)合并帶來的開銷。 如果您更新了配置,您需要刷新一下緩存讓更新的配置生效。
更多建議: