ufo-engineering / ko-events
Kohana框架的事件系统
Requires
- php: >=5.2.4
This package is not auto-updated.
Last update: 2024-09-29 05:01:36 UTC
README
此版本经过(一些更改)从此包转换而来,特别适用于通过composer使用https://packagist.org.cn/packages/unxp/kohana-events
Kohana框架的事件系统
发布于 2017-11-20
由 ufo-engineering
安装
composer require ufo-engineering/ko-events
配置
将..vendor/ufo-engineering/ko-events/config/events.php复制到application/config/events.php。所有事件及其处理器都必须在application/config/events.php配置文件中注册(默认)。但是,如果不存在events.php,库将尝试从数据库获取配置。您应该执行此文件的配置表转储events_tables.sql。目前,如果您选择数据库来存储配置数据,您应该手动添加特定数据。因此,对于普通任务,我们建议使用配置文件。配置被设计为针对每个环境的四个部分,但您也可以添加自己的。要注册一个事件,将它的类名作为数组键,并将它的处理器作为值。
示例
return [ 'events_handlers' => [ 'Event_Test' => ['Handler_EventTest'], //Event_Test is real class in dir application/classes/Event/Test.php 'someTestMethod' => ['Handler_EventTest'] // alias, for example method name //... ] ];
用法
- 创建一个事件类 ... application/classes/Event/Test.php
/** * Class Event_Test * * Fired when we do something */ class Event_Test { /** * @var Model_Test */ public $test; /** * @param Model_Test $test */ function __construct(Model_Test $test) { $this->test = $test; } }
- 创建一个处理器类
/** * Class Handler_EventTest * * For example: sends an email notification to user about successful registration */ class Handler_EventTest implements Ufo\Handler\EventHandler { /** * Handle an event * * @param Handler_EventTest $event * * @return bool|null */ public function handle($event) { // TODO send email } }
- 触发事件
use Ufo\Event; Event::fire(new Event_Test($user)); OR Event::fire('someTestMethod', $user);
所有事件处理器将按它们在events.php文件或数据库中定义的顺序执行。通过使handle方法返回false,您可以中断链并不再执行其他处理器。
额外
有一个额外的类EventHandlerNotification,用于轻松处理事件通知。但是,它需要来自https://github.com/shadowhand/email的Kohana邮件模块,或者您可以为您的需求调整邮件发送。
要使用此辅助程序,只需使您的处理器扩展此类并实现formatSubject和getReceivers方法。
示例
/** * Class Event_Handler_User_SendWelcomeEmail * * Sends an email notification to user about successful registration */ class Event_Handler_User_SendWelcomeEmail extends Ufo\Handler\Notification\EventHandlerNotification implements Ufo\Handler\EventHandler { /** * Handle an event * * @param Event_User_Registered $event * * @return bool|null */ public function handle($event) { $this->send($event, 'Welcome aboard user ' . $event->user->username . '!'); } /** * Format email notification subject * * @param Event_User_Registered $event * * @return string */ protected function formatSubject($event) { return 'Welcome ' . $user->username; } /** * Get notification receivers list * * @param Event_User_Registered $event * * @return array */ protected function getReceivers($event) { return array( $event->user->email => $event->user->username ); } }
表格
CREATE TABLE `action_handlers` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`placeholders` text,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `system_actions` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`description` varchar(255) DEFAULT NULL,
`handler_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
*一些更改
- 添加了对别名的支持
- 添加了数据库配置表