Fecshop 架構簡敘

2018-05-24 14:14 更新

Fecshop 架構結構

這里說明的是fecshop的文件結構,執(zhí)行流程等知識。

一:Composer包結構

1. Fecshop核心包

https://github.com/fancyecommerce/yii2_fecshop

這個是FecShop的核心包,里面包含 入口系統(tǒng)(appfront Appadmin等) ,以及對應的模塊配置,還包含擴展的yii2 component, 重寫的yii2的類,以及fecshop services(服務),model,shell(命令行), migrations(數(shù)據(jù)庫安裝)等等。

這個包類似yiisoft/yii2,將fecshop核心代碼以擴展的方式制作, 是為了解決fecshop升級和yii2二次開發(fā)者重新擴展fecshop的沖突

2. Fecshop入口包

https://github.com/fancyecommerce/yii2_fecshop_app_advanced

這個是fecshop的web入口包,里面有 appadmin/web,appfront/web, 以及圖片web的路徑,nginx解析到這些路徑,就可以進行訪問了 ,入口文件index.php就在這個包中,index.php中加載fecshop核心代碼的配置.

這個包類似 https://github.com/yiisoft/yii2-app-advanced, 起到一個web訪問路徑,加載fecshop核心代碼的作用, 安裝這個包后,fecshop核心包,會以擴展依賴的方式被加載過來,同樣yii2的核心庫 也是這樣。

3.其他依賴包

其他的不一一列舉,這個安裝后在vendor文件夾下面可以查看, 這里面有兩個我開發(fā)的擴展

DWZ(JUI)和yii2整合的后臺擴展: https://github.com/fancyecommerce/yii2_fec_admin

基礎封裝擴展: https://github.com/fancyecommerce/yii2-fec

4.為什么把Fecshop的核心代碼做成擴展包的方式?

對這個有疑問的朋友也比較多,為什么要做成擴展包,原因:

要解決fecshop升級和使用者二開的文件沖突問題。 使用者無權修改/vendor/fancyecommerce/fecshop下面的文件,只能通過配置的方式進行 重寫,如果強制修改/vendor/fancyecommerce/fecshop下面的文件,升級后將會被清除。

二:FecShop核心包文件結構

打開vendor/fancyecommerce/fecshop ,這里就是fecshop的核心代碼包。

1.app 文件夾

@fecshop/app里面 是各個入口系統(tǒng)的文件代碼,包含 @fecshop/app/appadmin,@fecshop/app/appfront等。

1.1@fecshop/app/appfront

這里是前端pc代碼,打開@fecshop/app/appfront,可以看到如下文件夾:

@fecshop/app/appfront/config            #appfront的配置代碼部分
@fecshop/app/appfront/helper            #appfront的各個模塊的公用helper類
@fecshop/app/appfront/languages         #appfront的語言翻譯包部分
@fecshop/app/appfront/modules           #appfront的模塊部分
@fecshop/app/appfront/theme             #appfront的模板theme部分
@fecshop/app/appfront/widgets           #appfront的小部件數(shù)據(jù)提供部分,這里的小部件是一個展示塊,譬如頁面的頂部,底部,側欄顯示產(chǎn)品瀏覽記錄等等,就是顯示的一個區(qū)塊。

1.1.1 @fecshop/app/appfront/modules

此文件夾下面的各個文件夾都是一個模塊,下面是詳細說明

@fecshop/app/appfront/config`                           #模塊的配置文件夾
@fecshop/app/appfront/modules/AppfrontController.php    #是各個模塊中controller的基類。
@fecshop/app/appfront/modules/AppfrontModule.php        #是各個模塊的Module.php的基類。

進入catalog 這個模塊,你會看到

@fecshop/app/appfront/modules/catalog/block         # 模塊的中間邏輯層
@fecshop/app/appfront/modules/catalog/controllers   # 模塊的控制層文件
@fecshop/app/appfront/modules/catalog/helpers       # 模塊的幫助類文件
@fecshop/app/appfront/modules/catalog/Module.php    # 模塊的入口文件,也就是在配置文件中指定該文件。

需要說明的是block是fecshop新加的一個層, 按照MVC邏輯,model的數(shù)據(jù)返回給controller中,這會造成controller 非常的膨大,因此,新加層后,fecshop的數(shù)據(jù)傳遞過程為:

用戶訪問-->fecshop初始化--->controller--->block--->services--->model

model從數(shù)據(jù)庫得到數(shù)據(jù),然后返回數(shù)據(jù):

model--->services--->block--->controller--->view-->反饋給用戶html

很多的數(shù)據(jù)的中間邏輯處理,都是在block層完成。

controller只負責調(diào)度,這樣層次比較分明,參看詳細代碼,您應該就會看明白詳細。 譬如:

fecshop\app\appfront\modules\Catalog\controllers\ProductController中的方法:

public function actionIndex()
{
    $data = $this->getBlock()->getLastData();
    return $this->render($this->action->id,$data);
}

$this->getBlock() 返回的是 fecshop\app\appfront\modules\Catalog\block\product\Index.php對應的對象, 執(zhí)行Index對象的getLastData()方法,返回給$data數(shù)組,然后,render函數(shù)將 數(shù)據(jù)傳遞給view層。

加入block層除了文件結構的層次分明,還會更好的重用函數(shù),精簡代碼。



1.1.2@fecshop/app/appfront/theme

這里是fecshop的模板部分,fecshop是在yii2基礎上進行了二次修改封裝, 使用的是多模板系統(tǒng),關于fecshop多模板,你可以看我的博文:

yii2 fecshop 多模板的介紹

yii2 多模板路徑優(yōu)先級加載view方式下- js和css 的解決



2.@fecshop/components

這是fecshop擴展的component(yii2 組件),這里只有一個store.php,這個概念屬于yii2的知識

3.@fecshop/config

各個app,譬如appfront appadmin公用的配置部分,里面大多數(shù)的配置是對services的配置。

4.@fecshop/interfaces

公用接口

5.lib

一些第三方的類庫

6.migrations

這個是在安裝fecshop對應的數(shù)據(jù)庫部分,執(zhí)行后,您的本地將會安裝 數(shù)據(jù)庫表,索引,以及數(shù)據(jù)。

7.models

數(shù)據(jù)庫對應的models

8.services

Fecshop 服務,是各個app端公用的service,是fecshop的底層部分

9.shell

執(zhí)行的腳本部分。

10.yii

重寫的yii2的文件存放的路徑。

三:二次開發(fā)結構

1. 功能重寫結構

功能重寫:要滿足在不修改源文件代碼的前期下修改FecShop的功能, 這樣才能滿足fecshop的升級。

安裝fecshop后,在安裝的根目錄,您會看到各個app開頭文件夾,譬如appadmin,appfront,apphtml5, appapi,appserver等, 這個部分是屬于二次開發(fā)用戶的,您可以在里面添加配置,添加文件等等,進行二次開發(fā)操作, 譬如在/appfront這個入口舉例:

1.1重寫語言,您在@appfront/languages 路徑的相應語言,填寫配置項,即可

重寫原來fecshop預設的翻譯,譬如

@appfront/languages/zh_CN/appfront.php中添加配置

<?php
return [
 'Follow Us' => '關注我們',
];

即可覆蓋fecshop的翻譯

@fecshop/app/appfront/languages/zh_CN/appfront.php 中的Follow Us翻譯。

1.2重寫theme

不同的store,可以設置不同的語言,不同的默認貨幣,不同的模板 ,fecshop的模板是在store中進行配置的, 打開配置文件:@appfront/config/fecshop_local_services/Store.php, 即可為每一個store設置本地模板路徑,本地路徑的文件會覆蓋fecshop模板路徑的文件, 這個是按照文件路徑進行的覆蓋。

store:fecshop.appfront.fancyecommerce.com/fr 設置的localThemeDir@appfront/theme/terry/theme01 .

覆蓋方法:

fecshop的appfront模板路徑為:@fecshop/app/appfront/theme/base/front

如果我想重寫 fecshop appfront 模板路徑里面的 catalog/product/index.php ,那么我在本地模板路徑 @appfront/theme/terry/theme01 下面新建文件 @appfront/theme/terry/theme01/catalog/product/index.php,即可完成重寫覆蓋。

1.3 重寫模塊

這個是Yii2的知識。您在@appfront/config/fecshop_local_modules下面添加一個配置文件 ,重新設置class指向的地址,就可以完全重寫這個模塊了

1.4 重寫yii2 component

這個是yii2的知識,添加配置覆蓋class即可

1.5 重寫Yii2 services

您在@appfront/config/fecshop_local_services下面添加一個配置文件,覆蓋class即可 ,譬如重寫fecshop product服務,新建文件@appfront/config/fecshop_local_services/Product.php ,填寫內(nèi)容:

return [
    'product' => [
        'class' => 'fecshop\services\Product',
    ],
]

將里面的class對應的路徑,換成您自己的路徑即可,然后新建您配置的路徑文件, 繼承fecshop\services\Product,如果重新里面的方法即可。

1.6 任意重寫

您可以通過classMap的方式,實現(xiàn)任意重寫, 這種方式適合對單個文件進行重寫,無論是yii2的文件,還是fecshop,還是第三方開發(fā) 的,都同樣適合,您可以在 @appfront/config/YiiClassMap.php里面添加對應關系, 具體的實現(xiàn)思路和原理參看我的博文: 通過配置的方式重寫某個Yii2 文件 或第三方擴展文件

1.7

總之,您可以在不修改vendor下面的任何文件的前提下(yii2 和 fecshop核心代碼),在appfront路徑下面,你可以二開屬于自己的功能,和重寫fecshop,yii2的功能。 擴展的功能。 這么不做詳細敘述。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號