申明

Yeshop是在yincart2的基础上修改而来,所以目录结构基本一致,但是为了方便以后文档中编辑介绍和区别于yincart,所以给取了一个名字,这就像你们领养了一个孩子,总要给他取个小名叫叫,亲切啊!下面进入正题。

目录结构

如下,针对系统中经常使用到的目录做了详细介绍:

### DIRECTORY STRUCTURE
-------------------
```
common
    config/              contains shared configurations #包含各个子系统(应用)的共享配置
    mail/                contains view files for e-mails #包含邮件模版
    data/              contain the user shared data #包含用户共享数据
console
    config/              contains console configurations #包含控制台配置
    controllers/         contains console controllers (commands) #包含控制台应用的控制器
    migrations/          contains database migrations #包含用于数据库迁移命令
    models/              contains console-specific model classes #包含控制台模型类
    runtime/             contains files generated during runtime

star-merchant    #后台应用
    assets/              contains application assets such as JavaScript and CSS #包含后台应用资源管理
    config/              contains star-merchant configurations #包含后台应用独立配置
    controllers/         contains Web controller classes #包含后台应用控制器
    models/              contains star-merchant-specific model classes #包含后台的模型类,由于模块化基本用不到
    runtime/             contains files generated during runtime
    views/               contains view files for the Web application
    web/                 contains the entry script and Web resources
star-home  #前台应用1
    assets/              contains application assets such as JavaScript and CSS
    config/              contains star-home configurations
    controllers/         contains Web controller classes
    models/              contains star-home-specific model classes
    runtime/             contains files generated during runtime
    views/               contains view files for the Web application
    web/                 contains the entry script and Web resources
    widgets/             contains star-home widgets
star-cluster  #前台应用2
    assets/              contains application assets such as JavaScript and CSS
    config/              contains star-cluster configurations
    controllers/         contains Web controller classes
    models/              contains star-cluster-specific model classes
    runtime/             contains files generated during runtime
    views/               contains view files for the Web application
    web/                 contains the entry script and Web resources
    widgets/             contains star-cluster widgets    
star-modules         contains common modules #包含公共模块

    acount/               帐号管理,该系统中该模块的功能由vendor/dektrium/yii2-rbac接管   
    aftersales/           售后模块,支持简单售后   
    refund/                 售后模块,未完成(退换货)   
    auth/                 权限管理模块   
    blog/                 博客模块   
    cart/                 购物车模块   
    catalog/              产品管理模块   
    content/              内容管理模块   
    dektrium_rbac/        帐号管理的语言包(对应vendor/dektrium/yii2-rbac权限管理模块)   
    dektrium_user/        帐号管理的语言包(对应vendor/dektrium/yii2-user登录注册模块)   
    marketing/            市场营销模块(优惠券、活动)   
    member/               会员中心模块(订单)   
    order/                订单管理模块   
    payment/              支付模块(暂只支持支付宝)   
    shipment/             物流模块(物流模版)   
    store/                ///   
    system/               系统管理模块(导航栏、站点配置项......)

star-image          contains pictures #包含图片,便于图片分离,可以使用单独的图片服务器

star-matter      #公用的一些类库

    base/

    behaviors/

    helpers/

    lib/

star-themes      contains the theme of the individual application #包含各个应用的主题

    cluster/         #前台应用主题

    home/          #前台应用主题

    merchant/    #后台应用的主题

vendor/                  contains dependent 3rd-party packages  #包含yii2框架
environments/       contains environment-based overrides #包含环境初始化所需的配置
tests                       contains various tests for the advanced application #包含各种高级应用的测试程序
    codeception/         contains tests developed with Codeception PHP Testing Framework
```


入口文件

该系统的几个应用的入口文件:

star-home/web/index.php

star-cluster/web/index.php

star-merchant/web/index.php


每个入口文件的内容都是一样的,看下截图

QQ图片20160830142611.png

需要注意的是入口文件的配置加载顺序,因为顺序关系到配置生效与否,总之只要清楚“后加载覆盖前加载”原则就好了,这个相信大家都能了解。


引导启动

bootstrap翻译成中文是“引导”的意思,即在程序启动阶段就被会加载。common/config/、star-home/config、star-merchant/config、star-cluster/config 这些配置文件夹下都包含一个bootstrap文件,在这些文件中我们一般去会干的事就是申明用户自定义常量、设置别名等。如common/config/bootstrap.php的截图:


QQ图片20160831104508.png









以上代码的设置了几个初始化别名,别名相当于特殊的常量变量,他的作用“在于避免将一些文件路径、URL以硬编码的方式写入代码中,或者多处出现一长串的文件路径、URL”。直白点就是用一小串字符代表一长串东西。


(ps:star-modules/{*}/对应模块名下大部分也都有Bootstrap文件,下面会提到)


关键架构

每个app的main.php配置文件中都有这么一个配置项:

'bootstrap' => [......,'matter\Gravitation',],

它的结果就是告诉yii,我要在系统启动的时候加载star-matter下的类Gravitation。该类负责检索star-modules/{*}/下所有模块的Bootstrap类并加载,这些Bootstrap都继承自同一个父类baseBootstrap。

这么做的好处是即能实现各个模块个性化定制,也能做到统一管理。如它们都有一个共同属性settingCode, 系统就是通过该属性来管理各模块的开启、关闭。


先到这吧!!!