Yii 框架应用(Applications)操作实例详解

2020-05-15 14:00:45王旭

EVENT_AFTER_REQUEST

该事件在应用处理请求 after 之后但在返回响应 before 之前触发, 实际的事件名为 afterRequest

该事件触发时,请求已经被处理完, 可以做一些请求后处理或自定义响应。

注意 response 组件在发送响应给终端用户时也会触发一些事件, 这些事件都在本事件 after 之后触发。

EVENT_BEFORE_ACTION

该事件在每个 控制器动作 运行before之前会被触发, 实际的事件名为 beforeAction.

事件的参数为一个 yiibaseActionEvent 实例, 事件处理中可以设置yiibaseActionEvent::$isValid 为 false 停止运行后续动作, 例如:

[
 'on beforeAction' => function ($event) {
  if (some condition) {
   $event->isValid = false;
  } else {
  }
 },
]

注意 模块 和 控制器 都会触发 beforeAction 事件。 应用主体对象首先触发该事件,然后模块触发(如果存在模块),最后控制器触发。 任何一个事件处理中设置 yiibaseActionEvent::$isValid 设置为 false 会停止触发后面的事件。

EVENT_AFTER_ACTION

该事件在每个 控制器动作 运行after之后会被触发, 实际的事件名为 afterAction.

该事件的参数为 yiibaseActionEvent 实例, 通过 yiibaseActionEvent::$result 属性, 事件处理可以访问和修改动作的结果。例如:

[
 'on afterAction' => function ($event) {
  if (some condition) {
   // 修改 $event->result
  } else {
  }
 },
]

注意 模块 和 控制器 都会触发 afterAction 事件。 这些对象的触发顺序和 beforeAction 相反,也就是说, 控制器最先触发,然后是模块(如果有模块),最后为应用主体。

应用主体生命周期

Application Lifecycle

当运行 入口脚本 处理请求时, 应用主体会经历以下生命周期:

    入口脚本加载应用主体配置数组。 入口脚本创建一个应用主体实例: 调用 preInit() 配置几个高级别应用主体属性, 比如 basePath。 注册 error handler 错误处理方法. 配置应用主体属性. 调用 init() 初始化,该函数会调用 bootstrap() 运行引导启动组件. 入口脚本调用 yiibaseApplication::run() 运行应用主体: 触发 EVENT_BEFORE_REQUEST 事件。 处理请求:解析请求 路由 和相关参数; 创建路由指定的模块、控制器和动作对应的类,并运行动作。 触发 EVENT_AFTER_REQUEST 事件。 发送响应到终端用户. 入口脚本接收应用主体传来的退出状态并完成请求的处理。

更多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

相关文章 大家在看