tfhinc/ci-newton

简单观察 - Newton 允许您在 Codeigniter 框架中订阅并监听事件广播。

v2.1.0 2018-12-05 02:50 UTC

This package is not auto-updated.

Last update: 2024-09-20 07:49:12 UTC


README

Latest Version on Packagist PHP Version Software License Total Downloads

简单观察 - 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 类,进而实例化已订阅的类 SendAdminEmailListenerUpdateUserStatsListener

贡献

请随意创建 GitHub 问题或发送包含任何错误修复的 pull request。有关需要帮助的问题,请参阅 GutHub 问题跟踪器。

致谢

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件