raid / core-event
Raid 核心事件
Requires
- php: ^8.2
- raid/core-command: dev-main
- raid/core-enum: *
Requires (Dev)
- laravel/pint: ^1.10
This package is auto-updated.
Last update: 2024-09-25 21:42:57 UTC
README
此包负责处理系统中所有事件。
安装
composer require raid/core-event
配置
php artisan core:publish-event
使用方法
class UserController extends Controller { /** * Invoke the controller method. */ public function __invoke(Request $request) { $user = User::create($request->only(['name', 'email', 'password'])); // let's trigger the create event. User::events('create', $user); // or using the trigger method User::events()->trigger('create', $user); // using the facade Events::trigger('user.create', $user); // using the helper events()->trigger('user.create', $user); } }
如何使用
让我们从我们的可事件化类 User
开始。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Raid\Core\Event\Traits\Event\Eventable; class User extends Model { use Eventable; }
要定义可事件化类(例如:User
模型事件),我们有两种方法
- 定义
getEvents
方法。
<?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use Raid\Core\Event\Traits\Event\Eventable; use App\Events\CreateUserEvent; class User extends Model { use Eventable; /** * Get eventable events. */ public static function getEvents(): array { return [ // here we define our event classes. CreateUserEvent::class, ]; } }
- 定义
config/event.php
事件。
'events' => [ // here we define our eventable class. User::class => [ // here we define our event classes. CreateUserEvent::class, ], ],
现在,让我们创建我们的事件类 CreateUserEvent
。
可以使用此命令创建事件类。
php artisan core:make-event CreateUserEvent
以下是事件类。
<?php namespace App\Events; use Raid\Core\Event\Events\Contracts\EventInterface; use Raid\Core\Event\Events\Event; class CreateUserEvent extends Event implements EventInterface { /** * {@inheritdoc} */ public const ACTION = ''; /** * {@inheritdoc} */ public const LISTENERS = []; }
事件类必须实现 EventInterface
接口。
事件类必须扩展 Event
类。
事件类必须定义 ACTION
常量,即事件动作名称。
LISTENERS
常量是一个数组,包含将在事件触发时调用的监听器类。
现在,让我们创建我们的事件监听器 CreateUserListener
。
可以使用此命令创建事件监听器类。
php artisan core:make-listener CreateUserListener
<?php namespace App\Listeners; use Raid\Core\Event\Events\Contracts\EventListenerInterface; class CreateUserListener implements EventListenerInterface { /** * Initialize the listener. */ public function init(): void { } /** * Handle the listener. */ public function handle(): void { } }
事件监听器类必须实现 EventListenerInterface
接口。
init
方法是事件监听器初始化时将被调用的方法。
handle
方法是事件触发时将被调用的方法。
让我们完成事件类和监听器类。
<?php namespace App\Events; use Raid\Core\Event\Events\Contracts\EventInterface; use Raid\Core\Event\Events\Event; class CreateUserEvent extends Event implements EventInterface { /** * {@inheritdoc} */ public const ACTION = 'create'; /** * {@inheritdoc} */ public const LISTENERS = [ CreateUserListener::class, ]; }
<?php namespace App\Listeners; use App\Models\User; use Raid\Core\Event\Events\Contracts\EventListenerInterface; class CreateUserListener implements EventListenerInterface { /** * Handle the listener. */ public function handle(User $user): void { // here we can do many things with the event given arguments. } }
现在,让我们使用其监听器触发事件。
<?php namespace App\Http\Controllers; use App\Models\User; class UserController extends Controller { /** * Invoke the controller method. */ public function __invoke(Request $request) { $user = User::create($request->only(['name', 'email', 'password'])); User::events()->trigger('create', $user); } }
events
方法是一个静态方法,将从 Eventable
特性中调用。
trigger
方法是一个方法,将从触发动作相关的 Events
和 Listeners
中调用。
这将调用与触发事件动作相关的每个监听器中的 handle
方法,而不调用 init
方法。
就是这样。
许可
MIT 许可证 (MIT)。请参阅 许可文件 以获取更多信息。
致谢
安全性
如果您发现任何与安全相关的问题,请通过电子邮件报告,而不是使用问题跟踪器。
关于 Raid
Raid 是由 Mohamed Khedr 创建的 PHP 框架,由 Mohamed Khedr 维护。
支持 Raid
Raid 是一个 MIT 许可的开源项目。这是一个独立项目,其持续发展得以实现。