Yii2 使用Event -1 ,如何使用事件_@TERRY
2017-05-07 23:52
253 查看
1.首先需要 定义 事件传递的数据格式类:
<?php
namespace myapp\frontend\code\ECM\Customer\events;
use Yii;
use yii\base\Model;
use yii\base\Event;
/**
* ContactForm is the model behind the contact form.
*/
class MessageEvent extends Event
{
public $message;
}
在这个 MessageEvent 里面就定义了一个变量 $message
2.
编写事件: 事件只要定义个hello 函数,然后参数为 上面第一步分传递的$event 对象,里面包含$message 参数,如果这个Event执行
那么。将会写入日志。
<?php
namespace myapp\frontend\code\ECM\Customer\events;
use Yii;
/**
* ContactForm is the model behind the contact form.
*/
class Ha
{
public function
hello($event){
Yii::info($event->message,'mylog');
}
}
3
绑定和触发事件
<?php
namespace myapp\frontend\code\ECM\Cms\controllers;
use Yii;
use myapp\frontend\code\ECM\BaseController;
use myapp\frontend\code\ECM\Customer\events\Ha;
use myapp\frontend\code\ECM\Customer\events\MessageEvent;
class IndexController extends BaseController
{
# 定义Event的名字
const EVENT_HELLO =
'my hello';
public function
actionIndex()
{
#定义传递数据的格式
Event
$event = new MessageEvent;
# 赋值
$event->message =
'good';
# 绑定事件Event
这个事件对应的是:Ha->hello($event);
$this->on(self::EVENT_HELLO,
[new
\myapp\frontend\code\ECM\Customer\events\Ha(),
'hello']);
# 触发事件
,$event 这个对象传递到 Ha->hello($event);
$this->trigger(self::EVENT_HELLO,$event);
return $this->render('index');
}
}
从这里看,貌似没有多大用处,直接作为参数调用就行了,两边都写代码麻烦
但是,事件是可以不再文件的函数内书写绑定,可以在new 对象之后再绑定
$foo = new Foo;
// 处理器是全局函数
$foo->on(Foo::EVENT_HELLO,
'function_name');
// 处理器是对象方法
$foo->on(Foo::EVENT_HELLO,
[$object,
'methodName']);
也可以在Behavior 行为绑定事件。
譬如在一个类保存的时候可以触发一个 保存后的事件
如果这个类没有绑定事件,那么执行为空
如果绑定,就会执行
1.如果一个Event,被多个类执行,一般使用Behavior的方式进行绑定,譬如 Avtive Record 保存后写入log
这种情况一般是自己写的类,使用别人写的,或者自己写的Event。进行一些处理
2.如果是系统的类,类的事件触发已经写好,但是没有绑定事件,默认什么也没有执行,譬如active Record 的 beforeSave操作
对于这种,我们不能去修改系统的代码,所以,我们可以通过$foo->on()的方式进行绑定,然后在执行save操作,就会触发beforeSave();
当然,我们可以定义一个子类,继承ActiveRecord,然后再里面添加行为。
<?php
namespace myapp\frontend\code\ECM\Customer\events;
use Yii;
use yii\base\Model;
use yii\base\Event;
/**
* ContactForm is the model behind the contact form.
*/
class MessageEvent extends Event
{
public $message;
}
在这个 MessageEvent 里面就定义了一个变量 $message
2.
编写事件: 事件只要定义个hello 函数,然后参数为 上面第一步分传递的$event 对象,里面包含$message 参数,如果这个Event执行
那么。将会写入日志。
<?php
namespace myapp\frontend\code\ECM\Customer\events;
use Yii;
/**
* ContactForm is the model behind the contact form.
*/
class Ha
{
public function
hello($event){
Yii::info($event->message,'mylog');
}
}
3
绑定和触发事件
<?php
namespace myapp\frontend\code\ECM\Cms\controllers;
use Yii;
use myapp\frontend\code\ECM\BaseController;
use myapp\frontend\code\ECM\Customer\events\Ha;
use myapp\frontend\code\ECM\Customer\events\MessageEvent;
class IndexController extends BaseController
{
# 定义Event的名字
const EVENT_HELLO =
'my hello';
public function
actionIndex()
{
#定义传递数据的格式
Event
$event = new MessageEvent;
# 赋值
$event->message =
'good';
# 绑定事件Event
这个事件对应的是:Ha->hello($event);
$this->on(self::EVENT_HELLO,
[new
\myapp\frontend\code\ECM\Customer\events\Ha(),
'hello']);
# 触发事件
,$event 这个对象传递到 Ha->hello($event);
$this->trigger(self::EVENT_HELLO,$event);
return $this->render('index');
}
}
从这里看,貌似没有多大用处,直接作为参数调用就行了,两边都写代码麻烦
但是,事件是可以不再文件的函数内书写绑定,可以在new 对象之后再绑定
$foo = new Foo;
// 处理器是全局函数
$foo->on(Foo::EVENT_HELLO,
'function_name');
// 处理器是对象方法
$foo->on(Foo::EVENT_HELLO,
[$object,
'methodName']);
也可以在Behavior 行为绑定事件。
譬如在一个类保存的时候可以触发一个 保存后的事件
如果这个类没有绑定事件,那么执行为空
如果绑定,就会执行
1.如果一个Event,被多个类执行,一般使用Behavior的方式进行绑定,譬如 Avtive Record 保存后写入log
这种情况一般是自己写的类,使用别人写的,或者自己写的Event。进行一些处理
2.如果是系统的类,类的事件触发已经写好,但是没有绑定事件,默认什么也没有执行,譬如active Record 的 beforeSave操作
对于这种,我们不能去修改系统的代码,所以,我们可以通过$foo->on()的方式进行绑定,然后在执行save操作,就会触发beforeSave();
当然,我们可以定义一个子类,继承ActiveRecord,然后再里面添加行为。
相关文章推荐
- Yii2 使用Event -2 ,如何使用事件_@TERRY
- JavaScript 中的window.event代表的是事件的状态,jquery事件对象属性,jquery中如何使用event.target
- 【Unity3D】【NGUI】如何使用新的Event事件
- Yii2 如何使用事件
- Select中使用js动态修改了Option时如何触发onchange事件
- KB824209:如何使用 EventcombMT 实用工具搜索事件日志以查找帐户锁定
- Event事件函数的使用例子
- 下面的示例演示如何使用传递到事件处理方法的 GridViewCommandEventArgs 对象确定引发事件的按钮的命令名。
- 如何使用 Visual C# .NET 处理 Excel 事件
- 回发或回调参数无效。在配置中使用 或在页面中使用 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。
- [引]如何藉由使用 Visual C# . NET 處理 Word 中的事件
- 如何使用 RowDataBound 事件在数据源中的字段值显示在 GridView 控件中之前修改该值
- 如何使用事件
- 使用mouse_event时屏幕绝对坐标如何计算
- 如何使用Connection对象的的事件
- 演示事件(Event)怎样使用以及怎样为用户控件添加一个事件(示例代码下载)
- 如何使用委托与事件来实现观察者模式
- 在.NET2.0中如何更简单的使用委托将方法加载到事件中去
- 关于对“如何使用hibernate的event/eventlistener ”的补充
- 如何:使用字典存储事件实例(C# 编程指南)