infrajs / event
此包最新版本(v1.0.13)没有可用的许可信息。
v1.0.13
2020-08-05 09:47 UTC
Requires
- infrajs/ans: ~1
- infrajs/each: ~1
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, например, массив с данными позиции каталога. Уникальность позиции определяется производителем и артикулом.