frame Yii -2

94 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情

请求生命周期

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

应用结构

  • Yii 应用参照模型-视图-控制器 (MVC) 设计模式来组织.
    • 模型 : 代表数据、业务逻辑和规则;
    • 视图 : 展示模型的输出;
    • 控制器 : 接受出入并将其转换为模型和视图命令
    • 入口脚本 : 终端用户能直接访问的 PHP 脚本, 负责启动一个请求处理周期.
    • 应用 : 能全局范围内访问的对象, 管理协调组件来完成请求.
    • 应用组件 : 在应用中注册的对象, 提供不同的功能来完成请求.
    • 模块 : 包含完整 MVC 结构的独立包, 一个应用可以由多个模块组建.
    • 过滤器 : 控制器在处理请求之前或之后 需要触发执行的代码.
    • 小部件 : 可嵌入到视图中的对象, 可包含控制器逻辑,可被不同视图重复调用.

入口脚本

  • 定义全局常量;
  • 注册 Composer 自动加载器;
  • 包含 Yii 类文件;
  • 加载应用配置;
  • 创建一个应用实例并配置;
  • 调用 yii\base\Application::run() 来处理请求.
  • 定义常量
    • YII_DEBUG : 标识应用是否运行在调试模式.当在调试模式下,应用会保留更多日志信息, 如果抛出异常,会显示详细的错误调用堆栈. 因此,调试模式主要适合在开发阶段使用,YII_DEBUG 默认值为 false.
    • YII_ENV : 标识应用运行的环境,详情请查阅 配置章节. YII_ENV 默认值为 'prod',表示应用运行在线上产品环境.
    • YII_ENABLE_ERROR_HANDLER : 标识是否启用 Yii 提供的错误处理, 默认为 true.

Gii生成代码

Gii可以快速生成一部分代码
  • 开启Gii
    • 如果是开发环境,应用会包含gii模块
        首先在入口脚本处设置当前环境
        defined('YII_ENV') or define('YII_ENV', 'dev');
    
        //main-local.php文件中
        $config = [ ... ];
    
        if (YII_ENV_DEV) {
            $config['bootstrap'][] = 'gii';
            $config['modules']['gii'] = [
                'class' => 'yii\gii\Module',
                'allowedIPs' => ['10.0.*', '127.0.*']
            ];
        }
    
  • 生成活动记录类[AR]
  • 生成 CRUD 代码
    • Model Class
    • Search Model Class
    • Controller Class