Yii2 的目录结构及功能

打开项目根目录我们看一下Yii2的目录结构如下:

common
    config/              包含共享配置
    mail/                包含电子邮件的查看文件
    models/              包含在后台和前台中使用的模型类
    tests/               包含普通类的测试   
console
    config/              包含控制台配置
    controllers/         包含控制台控制器(命令)
    migrations/          包含数据库迁移
    models/              包含特定于控制台的模型类
    runtime/             包含运行时生成的文件
backend
    assets/              包含应用程序资产,如JavaScript和CSS
    config/              包含后台配置
    controllers/         包含Web控制器类
    models/              包含后台特定的模型类
    runtime/             包含运行时生成的文件
    tests/               包含后台应用程序的测试
    views/               包含Web应用程序的视图文件
    web/                 包含条目脚本和Web资源
frontend
    assets/              包含应用程序资产,如JavaScript和CSS
    config/              包含前台配置
    controllers/         包含Web控制器类
    models/              包含前台特定的模型类
    runtime/             包含运行时生成的文件
    tests/               包含前台应用程序的测试
    views/               包含Web应用程序的视图文件
    web/                 包含条目脚本和Web资源
    widgets/             包含前台小部件
vendor/                  包含相关的第三方软件包
environments/            包含基于环境的覆盖

实际上框架大部分都在vendor依赖库里,毕竟yii2块头可不小,懂的小伙伴们可以看下composer.json和vendor目录到底装备了多少武器。

代码仓下回来这个叫高级模板,当然还有基础模板的,因为高级模板包含基础模板,也更方便,这里直接讲高级模板(它们的区别

模板就是依葫芦画瓢中的葫芦的意思,上面都把目录结构标出来,这个高级模板一共分成三个应用

console(控制台)就是在bash里面运行的脚本,譬如我们初始化生成两个表的php yii migrate/up 都是放在这里面的

frontend(前台) 这是一个web应用

backend(后台)这是另一个web应用

为啥放两个web应用,其实这个结构目录可以完全一致,因为拆分,这里我就讲一下为啥拆分:

本来一个文章系统,大家写写文章,浏览文章。可是后来因为审核机制,需要管理删除文章,系统简单,标识其中一个用户为管理员,后来文章多了,一个管不过来,要多几个,要加字段,谁审核的又要加日志,譬如还要管用户,审核复杂多变又要加权限......,这种管理功能完全可以并行搞一个后台,写文章和管理可以不用相同的账户体系,为管理员专门做一个web应用,譬如后台系统。功能职责拆分是最常见的,还有购物系统,可以分为总后台,商户后台,顾客前台....,这样的拆分可以多招程序员加快进度,可以分机部署,反正能并行能相对隔离的,能直的就不分叉......,你只要参照frontend或者backend 复制一下,重名一下就又拆分多了一个web应用,当然也要记得依葫芦画瓢,把其他配置相应改变(这个有机会在讲)。


但是这些系统又不是完全没有关系,譬如文章系统前台后台,虽然用户不同,但是同样需要文章数据啊,所以文章数据就是一个公共共享的,为了节约代码,就可以放到common 公共目录给两个系统调用,还有一些其他公共资源都可以放这个目录。


讲完这些还有一个目录environments/ 这个干啥用的呢,其实前文  yii2 初始化的时候,运行  ./init 脚本 选择0 会把environments/dev 里面的文件带目录释放在根目录,选择1会把nvironments/prod 里面的文件带目录释放在根目录。其实就是按照环境选择把各个应用的本机配置文件和入口文件释放到原来的位置。嗯,就是仅在部署时候用到的。


我们把重要的模板分成以下是四类 

  1. 配置 全部在config 文件夹  common里面的是公共配置,应用下面的config是应用配置 ,config下面命名带local的文件是本机配置

    打个比方很多武器都在vendor文件,config里面的文件会给这些武器做一些初始参数配置,Yii启动时候就会带着这些参数去初始化武器,然后整个系统到处就可以调用这些武器了。

  2. 数据 全部在model 文件夹 里面一个文件通常对应数据库的一张表

  3. 控制 全部在controller文件夹,里面的文件通常干的事情都是 通过model从数据库把数据拿过来加工然后加工好的数据扔给视图

  4. 视图模板 全部在view 文件夹 这里没有用其他模板引擎,php自带的渲染把数据和模板拼接成html给浏览器

 web应用的入口文件全在web文件夹里面的index.php,也是nginx设置的web根目录

  控制台应用的入口文件就在项目根目录 yii 文件

至于其他的文件夹子文件夹,我们什么时候用到什么时候说。



评论区
登陆 后评论!