- Yii 教程
- Yii - 主页
- Yii - 概述
- Yii - 安装
- Yii - 创建页面
- Yii - 应用程序结构
- Yii - 入口脚本
- Yii - 控制器
- Yii - 使用控制器
- Yii - 使用动作
- Yii - 模型
- Yii - 小部件
- Yii - 模块
- Yii - 视图
- Yii - 布局
- Yii - 资产
- Yii - 资产转换
- Yii - 扩展
- Yii - 创建扩展
- Yii - HTTP 请求
- Yii - 响应
- Yii - URL 格式
- Yii - URL 路由
- Yii - URL 规则
- Yii - HTML 表单
- Yii - 验证
- Yii - 临时验证
- Yii - AJAX 验证
- Yii - 会话
- Yii - 使用闪存数据
- Yii - cookie
- Yii - 使用 Cookie
- Yii - 文件上传
- Yii - 格式化
- Yii - 分页
- Yii - 排序
- Yii - 属性
- Yii - 数据提供者
- Yii - 数据小部件
- Yii - 列表视图小部件
- Yii - GridView 小部件
- Yii - 活动
- Yii - 创建事件
- Yii - Behave
- Yii - 创建Behave
- Yii - 配置
- Yii - 依赖注入
- Yii - 数据库访问
- Yii - 数据访问对象
- Yii - 查询生成器
- Yii - 活动记录
- Yii - 数据库迁移
- Yii - 主题化
- Yii - RESTful API
- Yii - RESTful API 的实际应用
- Yii - 字段
- Yii - 测试
- Yii - 缓存
- Yii - 片段缓存
- Yii - 别名
- Yii - 日志记录
- Yii - 错误处理
- Yii - 身份验证
- Yii - 授权
- Yii - 本地化
- Yii-Gii
- Gii – 创建模型
- Gii – 生成控制器
- Gii – 生成模块
- Yii 有用的资源
- Yii - 快速指南
- Yii - 有用的资源
- Yii - 讨论
Yii - 活动
您可以使用事件在某些执行点注入自定义代码。您可以将自定义代码附加到事件,当事件被触发时,代码就会被执行。例如,当新用户在您的网站上注册时,记录器对象可能会触发userRegistered事件。如果一个类需要触发事件,你应该从 yii\base\Component 类扩展它。
事件处理程序是 PHP 回调。您可以使用以下回调 -
指定为字符串的全局 PHP 函数。
匿名函数。
类名和方法的数组(字符串形式),例如 ['ClassName', 'methodName']
对象和方法的数组(字符串形式),例如 [$obj, 'methodName']
步骤 1 - 要将处理程序附加到事件,您应该调用yii\base\Component::on()方法。
$obj = new Obj; // this handler is a global function $obj->on(Obj::EVENT_HELLO, 'function_name'); // this handler is an object method $obj->on(Obj::EVENT_HELLO, [$object, 'methodName']); // this handler is a static class method $obj->on(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']); // this handler is an anonymous function $obj->on(Obj::EVENT_HELLO, function ($event) { // event handling logic });
您可以将一个或多个处理程序附加到一个事件。附加的处理程序按照附加到事件的顺序进行调用。
步骤 2 - 要停止处理程序的调用,您应该将yii\base\Event::$handled 属性设置为true。
$obj->on(Obj::EVENT_HELLO, function ($event) { $event->handled = true; });
步骤 3 - 要在队列开头插入处理程序,您可以调用yii\base\Component::on(),为第四个参数传递 false。
$obj->on(Obj::EVENT_HELLO, function ($event) { // ... }, $data, false);
步骤 4 - 要触发事件,请调用yii\base\Component::trigger()方法。
namespace app\components; use yii\base\Component; use yii\base\Event; class Obj extends Component { const EVENT_HELLO = 'hello'; public function triggerEvent() { $this->trigger(self::EVENT_HELLO); } }
步骤 5 - 要从事件中分离处理程序,您应该调用yii\base\Component::off()方法。
$obj = new Obj; // this handler is a global function $obj->off(Obj::EVENT_HELLO, 'function_name'); // this handler is an object method $obj->off(Obj::EVENT_HELLO, [$object, 'methodName']); // this handler is a static class method $obj->off(Obj::EVENT_HELLO, ['app\components\MyComponent', 'methodName']); // this handler is an anonymous function $obj->off(Obj::EVENT_HELLO, function ($event) { // event handling logic });