国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

Fecshop 架構(gòu)簡(jiǎn)敘

2018-05-24 14:14 更新

Fecshop 架構(gòu)結(jié)構(gòu)

這里說(shuō)明的是fecshop的文件結(jié)構(gòu),執(zhí)行流程等知識(shí)。

一:Composer包結(jié)構(gòu)

1. Fecshop核心包

https://github.com/fancyecommerce/yii2_fecshop

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

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

2. Fecshop入口包

https://github.com/fancyecommerce/yii2_fecshop_app_advanced

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

這個(gè)包類(lèi)似 https://github.com/yiisoft/yii2-app-advanced, 起到一個(gè)web訪問(wèn)路徑,加載fecshop核心代碼的作用, 安裝這個(gè)包后,fecshop核心包,會(huì)以擴(kuò)展依賴(lài)的方式被加載過(guò)來(lái),同樣yii2的核心庫(kù) 也是這樣。

3.其他依賴(lài)包

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

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

基礎(chǔ)封裝擴(kuò)展: https://github.com/fancyecommerce/yii2-fec

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

對(duì)這個(gè)有疑問(wèn)的朋友也比較多,為什么要做成擴(kuò)展包,原因:

要解決fecshop升級(jí)和使用者二開(kāi)的文件沖突問(wèn)題。 使用者無(wú)權(quán)修改/vendor/fancyecommerce/fecshop下面的文件,只能通過(guò)配置的方式進(jìn)行 重寫(xiě),如果強(qiáng)制修改/vendor/fancyecommerce/fecshop下面的文件,升級(jí)后將會(huì)被清除。

二:FecShop核心包文件結(jié)構(gòu)

打開(kāi)vendor/fancyecommerce/fecshop ,這里就是fecshop的核心代碼包。

1.app 文件夾

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

1.1@fecshop/app/appfront

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

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

1.1.1 @fecshop/app/appfront/modules

此文件夾下面的各個(gè)文件夾都是一個(gè)模塊,下面是詳細(xì)說(shuō)明

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

進(jìn)入catalog 這個(gè)模塊,你會(huì)看到

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

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

用戶(hù)訪問(wèn)-->fecshop初始化--->controller--->block--->services--->model。

model從數(shù)據(jù)庫(kù)得到數(shù)據(jù),然后返回?cái)?shù)據(jù):

model--->services--->block--->controller--->view-->反饋給用戶(hù)html

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

controller只負(fù)責(zé)調(diào)度,這樣層次比較分明,參看詳細(xì)代碼,您應(yīng)該就會(huì)看明白詳細(xì)。 譬如:

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對(duì)應(yīng)的對(duì)象, 執(zhí)行Index對(duì)象的getLastData()方法,返回給$data數(shù)組,然后,render函數(shù)將 數(shù)據(jù)傳遞給view層。

加入block層除了文件結(jié)構(gòu)的層次分明,還會(huì)更好的重用函數(shù),精簡(jiǎn)代碼。



1.1.2@fecshop/app/appfront/theme

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

yii2 fecshop 多模板的介紹

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



2.@fecshop/components

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

3.@fecshop/config

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

4.@fecshop/interfaces

公用接口

5.lib

一些第三方的類(lèi)庫(kù)

6.migrations

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

7.models

數(shù)據(jù)庫(kù)對(duì)應(yīng)的models

8.services

Fecshop 服務(wù),是各個(gè)app端公用的service,是fecshop的底層部分

9.shell

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

10.yii

重寫(xiě)的yii2的文件存放的路徑。

三:二次開(kāi)發(fā)結(jié)構(gòu)

1. 功能重寫(xiě)結(jié)構(gòu)

功能重寫(xiě):要滿(mǎn)足在不修改源文件代碼的前期下修改FecShop的功能, 這樣才能滿(mǎn)足fecshop的升級(jí)。

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

1.1重寫(xiě)語(yǔ)言,您在@appfront/languages 路徑的相應(yīng)語(yǔ)言,填寫(xiě)配置項(xiàng),即可

重寫(xiě)原來(lái)fecshop預(yù)設(shè)的翻譯,譬如

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

<?php
return [
 'Follow Us' => '關(guān)注我們',
];

即可覆蓋fecshop的翻譯

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

1.2重寫(xiě)theme

不同的store,可以設(shè)置不同的語(yǔ)言,不同的默認(rèn)貨幣,不同的模板 ,fecshop的模板是在store中進(jìn)行配置的, 打開(kāi)配置文件:@appfront/config/fecshop_local_services/Store.php, 即可為每一個(gè)store設(shè)置本地模板路徑,本地路徑的文件會(huì)覆蓋fecshop模板路徑的文件, 這個(gè)是按照文件路徑進(jìn)行的覆蓋。

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

覆蓋方法:

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

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

1.3 重寫(xiě)模塊

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

1.4 重寫(xiě)yii2 component

這個(gè)是yii2的知識(shí),添加配置覆蓋class即可

1.5 重寫(xiě)Yii2 services

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

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

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

1.6 任意重寫(xiě)

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

1.7

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)