Yii2学习笔记系列2——运行应用

二 05 四月 2016

Yii2笔记系列2——运行应用

上一篇笔记中我们完成了Yii的简单介绍和安装,之后我们就有了一个可运行的Yii应用,通过http://hostname/basic/web/index.php或者http://hostname/index.php进行访问。

Yii应用包含的功能部分

安装完的完整的Yii的基本应用包含四项:

  • 主页,默认访问http://hostname/时显示的页面
  • 关于页,http://hostname/web/index.php?r=site%2Fabout,默认只有一行提示文字,你可以自主编辑/path/to/basic/views/site/about.php以展示自定义关于页面内容
  • 联系页,http://hostname/web/index.php?r=site%2Fcontact,显示一个Form表单允许终端用户通过Email联系你
  • 登录页,http://hostname/web/index.php?r=site%2Flogin,显示登录页面,默认用户名和密码都是"admin"

页面最底部可以看到一个工具栏,如下图所示,这是Yii提供的调试工具,可以记录并显示大量有用的调试信息,例如日志信息、响应状态以及数据库查询等等。

img

Yii应用的结构

假设你安装的应用的根目录是basic,那么应用的主要目录和文件的结构大致如下:

basic/                  应用根目录
    assets/             用于存放前端资源包PHP类,这里只需要先大致知道是用于管理CSS、js等前端资源就可以了
   commands/           包含控制台命令类
   composer.json       Composer 配置文件, 描述包信息
   composer.lock         第一次使用composer install或者执行composer update后生成的文件,此文件里定义了当前项目的代码依赖以及这些代码依赖的对应的版本
   config/             包含应用配置及其它配置
       console.php     控制台应用配置信息
       web.php         Web 应用配置信息
       db.php            数据库配置文件
       params.php        全局参数配置文件
   controllers/        包含控制器类
   mail                  包含与邮件相关的布局文件等
   models/             包含模型类
   requirements.php  用于检查当前PHP环境是否满足Yii最基本需求的PHP脚本文件
   runtime/            包含 Yii 在运行时生成的文件,例如日志和缓存文件
   tests/                用于存放测试类
   vendor/             包含已经安装的 Composer 包,包括 Yii 框架自身
   views/              包含视图文件
   web/                Web 应用根目录,包含 Web 入口文件
       assets/         包含 Yii 发布的资源文件(javascript 和 css)
       index.php       应用入口文件
   yii                 Yii 控制台命令执行脚本
   yii.bat              Yii 控制台命令脚本,针对windows系统

一般来说,Yii应用中的文件可以被划分为两类:在basic/web下的和在其它目录下的。前者可以直接通过HTTP进行访问(例如浏览器),后者不能也不应该被直接访问。

Yii实现的是常见的MVC设计模式,这点也可以从目录结构中看出。models目录中包含了所有模型类,views目录中包含了所有的视图脚本,controllers目录中包含了所有控制器类。

下图展示了一个Yii应用的静态结构:

img

每个应用都有一个入口脚本web/index.php,这是整个应用中唯一可以访问的PHP脚本。入口脚本的作用在于它接受一个Web请求并创建应用实例去处理它,应用在他的组件(Component)辅助下解析请求,并分派请求至MVC元素,视图则使用小部件(Widget)去创建复杂和动态的用户界面。

一个请求的生命周期

下图展示了一个应用如何处理请求:

img

  1. 用户向入口脚本web/index.php发起请求
  2. 入口脚本加载应用配置并创建一个应用实例去处理请求
  3. 应用通过请求组件解析请求的路由
  4. 应用创建一个控制器实例去处理请求
  5. 控制器创建一个操作实例并针对操作执行过滤器
  6. 如果任何一个过滤器返回失败,则操作退出
  7. 如果所有过滤器都通过,操作被执行
  8. 操作会加载一个数据模型,也有可能来自数据库
  9. 操作会渲染一个视图,并把数据模型提供给它
  10. 渲染结果返回给响应组件
  11. 响应组件发送渲染结果给用户浏览器

Category: PHP Develop

Comments