infrajs/event

此包最新版本(v1.0.13)没有可用的许可信息。

v1.0.13 2020-08-05 09:47 UTC

This package is auto-updated.

Last update: 2024-09-05 19:01:50 UTC


README

事件允许实现不同扩展之间的复杂关联。使两个扩展的交互更加通用和标准化。使用扩展A中的特定事件,扩展B可以执行扩展A事先不知道的任务,这确保了较低的耦合性。

通过composer安装

{
	"require":{
		"infrajs/event":"~1"
	}
}

使用

测试

要执行测试,请在浏览器中打开 /vendor/infrajs/event/tester.php

描述

Event::handler('onshow', function(){
	echo 'onshow';
});
Event::fire('onshow');
Event::handler('print', function(){
	echo 'World';
}, ':somekey');
Event::handler('print', function(){
	echo 'Hello ';
},'somekey');
Event::fire('print');
Есть нативный объект ```Event``` по этому в javascript нужно использовать ```Events```
Events.handler('print', function(){
	console.log('World');
}, ':somekey');
Events.handler('print', function(){
	console.log('Hello ');
},'somekey');
Events.fire('print');

Hello事件的存在不是订阅World所必需的,但如果存在该处理器,则World将在具有somekey的处理器之后作为第二个处理器执行。

如果所有订阅都有键且没有执行过的键,则将执行队列中的第一个订阅。

使用Infrajs

在生成Event事件时,所有安装或需要的模块的配置都必须被处理。为了收集所有订阅。

	\infrajs\config\Config::get();

换句话说,使用事件要求收集所有已安装扩展的配置。

同一类的事件

如果为类生成事件,则需要指定传递对象的区别标准。数据对象是关联数组,需要键来定义整个数组的唯一性。

Event::$classes["Yml"] = function($pos) { 
	return $pos["producer"].$pos["article"];
};

$res = Event::fire('Yml.oncheck', $pos); 
//$pos, например, массив с данными позиции каталога. Уникальность позиции определяется производителем и артикулом.