tfhinc / ci-newton
简单观察 - Newton 允许您在 Codeigniter 框架中订阅并监听事件广播。
Requires
- php: >=7.1.0
Requires (Dev)
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2024-09-20 07:49:12 UTC
README
简单观察 - Newton 允许您在 Codeigniter 框架中订阅并监听事件广播。
安装
composer require tfhinc/ci-newton
运行安装后的 publish-files
命令,将配置、辅助和库类文件发布到适当的 CI 目录
composer --working-dir=vendor/tfhinc/ci-newton/ run-script publish-files
加载库
加载 Newton 库有几种可选方式
使用 newton()
辅助函数
Newtown 辅助函数将通过 CI 实例解析 Newton 类。它将加载类或返回现有的类实例
$this->load->helper('newton');
使用 Newton 类
Newtown 类可以通过命名空间实例化
$newton = new TFHInc/Newton/Newton();
使用 Newton CI 库
Newtown 类可以像其他 CI 库一样加载
$this->load->library('Newton');
类结构
Newtown 库允许 Listener
类订阅 Event
类的广播。这有助于将业务逻辑解耦为具有单一目的的 Listener
类,这些类可以通过广播 Event
的大量调用。
事件类
Event
类定义了给定事件所需的属性,并在广播时接收。Event
类不包含任何业务逻辑 - 可以将其视为特定事件的所需数据蓝图。
application/events/UserCreatedEvent.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); namespace Events; /** * UserCreatedEvent * * A new User has been created. Yay, new user! * */ class UserCreatedEvent { /** * @var string */ public $email; /** * @var string */ public $first_name; /** * @var string */ public $last_name; /** * Construct the event. * * @param string $email * @param string $first_name * @param string $last_name * @return UserCreatedEvent */ public function __construct(string $email, string $first_name, string $last_name) { $this->email = $email; $this->first_name = $first_name; $this->last_name = $last_name; } }
监听器类
Listener
类包含在订阅的 Event
广播时将执行的业务逻辑。Listener
类将接收 Event
类的实例,其中包含事件属性,可用于业务逻辑。
请注意,Listener
类必须扩展 TFHInc/Newton/NewtonListener
抽象类。
application/listeners/SendAdminEmailListener.php
<?php namespace Listeners; /** * SendAdminEmailListener * * Send the admin an email. * */ class SendAdminEmailListener extends TFHInc/Newton/NewtonListener { /** * Run the listener. * * @return void */ public function run($event): void { // Send the Admin an Email. // mailto('admin@example.com', 'New User ' . $event->email . ' just signed up!'); } }
application/listeners/UpdateUserStatsListener.php
<?php namespace Listeners; /** * UpdateUserStatsListener * * Update the User stats with the new User data. * */ class UpdateUserStatsListener extends TFHInc/Newton/NewtonListener { /** * Run the listener. * * @return void */ public function run($event): void { // Update the User Stats. } }
订阅
您可以订阅 Listener
类到 Event
类。这意味着当 Event
广播时,订阅的 Listener
类将通过反射调用。有两种方法将 Listeners
订阅到 Events
通过配置文件
$config['subscriptions'] = [ 'Events\UserCreatedEvent' => [ 'Listeners\SendAdminEmailListener', 'Listeners\UpdateUserStatsListener' ] ];
通过订阅方法
newton()->subscribe('Events\UserCreatedEvent', [ 'Listeners\SendAdminEmailListener', 'Listeners\UpdateUserStatsListener' ]);
广播事件
可以通过 Newton 库或 newton()
辅助函数使用 broadcast()
方法广播 Event
。
// Broadcast an Event to all Subscribed Listeners via Newton helper newton()->broadcast('UserCreatedEvent', 'bob@example.com', 'Bob', 'Belcher'); // Broadcast an Event to all Subscribed Listeners via Newton class $newton->broadcast('UserCreatedEvent', 'bob@example.com', 'Bob', 'Belcher');
在这个例子中,将实例化 UserCreatedEvent
类,进而实例化已订阅的类 SendAdminEmailListener
和 UpdateUserStatsListener
。
贡献
请随意创建 GitHub 问题或发送包含任何错误修复的 pull request。有关需要帮助的问题,请参阅 GutHub 问题跟踪器。
致谢
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。