swoft 事件

1、swoft 官方文档说 触发事件的时候

Swoft::trigger('event name',  'target',  $arg0,  $arg1)

想知道 第二个参数 target 一般是代表啥

2、如何自定义事件
比如说我想定义一个 OrderSave事件
我应该在哪里定义

讨论数量: 1

1. target 说明

源码

interface EventInterface
{
    /**
     * Get event name
     *
     * @return string
     */
    public function getName(): string;

    /**
     * Get target/context from which event was triggered
     *
     * @return null|string|object
     */
    public function getTarget();

触发事件的目标。官网文档数据库一节中有介绍Eloquent 的模型触发事件, 其中target就是User的模型

class UserSavingListener implements EventHandlerInterface
{
    /**
     * @param EventInterface $event
     */
    public function handle(EventInterface $event): void
    {
        /* @var User $user */
        $user = $event->getTarget();

        if ($user->getAge() > 100) {
            // stopping saving
            $event->stopPropagation(true);

            $user->setAdd(100);
        }
    }
}

2. 如何自定义事件

理论上事件可以定义到任何目录,只要实现 Swoft\Event\EventHandlerInterface 接口,添加相应注解即可,不过为了方便统一管理,建议和官方demo一致统一放在app/Listener目录下,需要触发事件的地方执行以下代码

\Swoft::trigger('event name', 'target', $arg0, $arg1);

刚接触Swoft 希望能帮助到你

4年前 评论
Morris (楼主) 4年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!