转载 http://www.yiichina.com/doc/guide/2.0/start-workflow

声明周期

basic/                  应用根目录
    controllers/        包含控制器类
    models/             包含模型类
    views/              包含视图文件
    composer.json       Composer 配置文件, 描述包信息
    config/             包含应用配置及其它配置
        console.php     控制台应用配置信息
        web.php         Web 应用配置信息
    commands/           包含控制台命令类
    runtime/            包含 Yii 在运行时生成的文件,例如日志和缓存文件
    vendor/             包含已经安装的 Composer 包,包括 Yii 框架自身
    web/                Web 应用根目录,包含 Web 入口文件
        assets/         包含 Yii 发布的资源文件(javascript 和 css)
        index.php       应用入口文件
    yii                 Yii 控制台命令执行脚本

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

2017071613953request-lifecycle.png

Hello World

创建一个动作响应请求、创建一个视图去构造响应内容、应用分配请求给动作。

动作是最终用户可以直接访问并执行的对象。 动作必须声明在控制器中,一个动作的执行结果就是最终用户收到的响应内容。

创建一个say的动作: 该动作接收message动作(默认参数Hello),并显示给用户:

Controller:

<?php

namespace app\controllers;
use yii\web\Controller;

class SiteController extends Controller
{
    //Yii中`action`前缀区分普通方法和动作。`action`前缀后面的被称为动作id
    //动作 ID 总是被以小写处理,如果一个操作 ID 由多个单词组成,单词之间将由破折号连接(如 create-comment)。
    //动作 ID 映射为方法名时移除了破折号, 将每个单词首字母大写,并加上 action 前缀。 比如:动作 ID create-comment 对应方法名 actionCreateComment。
    public function actionSay($message = 'Hello')
    {
        //如果请求包含一个 message 参数,它的值是 “Goodybye”,那么动作方法中的 $message 变量也将赋值为 “Goodbye”。
        //在动作方法中,`yii\web\Controller::render()` 被用来渲染一个名为 `say` 的视图文件。 message 参数也被传入视图,这样就可以在里面使用。动作方法会返回渲染结果。 结果会被应用接收并显示给最终用户的浏览器(作为整页 HTML 的一部分)
        return $this->render('say', ['message' => $message]);
    }
    ...
}

View:

say 视图应该存为 views/site/say.php 文件。当一个动作中调用了 yii\web\Controller::render() 方法时, 它将会寻找名为 views/控制器 ID/视图名.php 的PHP文件。。

<?php
use yii\helpers\Html;
?>
<!--显示从动作方法中传来的 message 参数。-->
<?= Html::encode($message) ?>

访问: http://hostname/index.php?r=site/say&message=Hello+World