hyperf 事件机制

控制器 app/Controller/IndexControler.php

<?php
namespace App\Controller;

use App\Service\UserService;
use Hyperf\Di\Annotation\Inject;

class IndexController
{

        /**
         * @Inject
         * @var UserService
         */
        private $userService;


        public function index()
        {
                return $this->userService->register();
        }
}

Service类 app/Service/UserService.php

<?php
namespace App\Service;

use Hyperf\Di\Annotation\Inject;
use Psr\EventDispatcher\EventDispatcherInterface;
use App\Event\UserRegistered;


class UserService
{

        /**
         * @Inject
         * @var EventDispatcherInterface
         */
        private $eventDispatcher;


        public function register(){
                $user = ['id'=>1,'name'=>'huyongjian'];
                $this->eventDispatcher->dispatch(new UserRegistered($user));
                return '注册成功'.PHP_EOL;
        }
}

定义事件 app/Event/UserRegistered.php

<?php
namespace App\Event;

class UserRegistered
{
    // 建议这里定义成 public 属性,以便监听器对该属性的直接使用,或者你提供该属性的 Getter
    public $user;

    public function __construct($user)
    {
        $this->user = $user;
    }
}

定义监听器 app/Listener/UserRegisteredListener.php

<?php
namespace App\Listener;

use App\Event\UserRegistered;
use Hyperf\Event\Contract\ListenerInterface;

class UserRegisteredListener implements ListenerInterface
{
        public function listen(): array
        {
                // 返回一个该监听器要监听的事件数组,可以同时监听多个事件
                return [
                        UserRegistered::class,
                ];
        }

        /**
         * @param UserRegistered $event
         */
        public function process(object $event)
        {
                // 事件触发后该监听器要执行的代码写在这里,比如该示例下的发送用户注册成功短信等
                // 直接访问 $event 的 user 属性获得事件触发时传递的参数值
                // $event->user;
                echo "UserRegistered事件触发成功,该监听器执行对应代码".PHP_EOL;
        }
}

配置文件注册监听器 config/autoload/listeners.php

<?php
return [
    \App\Listener\UserRegisteredListener::class,
];

客户端测试

curl 118.195.173.53:9501

客户端结果显示

注册成功

服务端结果显示

UserRegistered事件触发成功,该监听器执行对应代码
posted @ 2021-09-15 16:22  胡勇健  阅读(187)  评论(0)    收藏  举报