hyperf事件机制

发布时间:2021-12-30 13:40:02 阅读:940次

在laravel中有事件机制,那么在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事件触发成功,该监听器执行对应代码

转载https://www.cnblogs.com/hu308830232/p/15272747.html

如有问题,可以QQ搜索群1028468525加入群聊,欢迎一起研究技术

支付宝 微信

有疑问联系站长,请联系QQ:QQ咨询

转载请注明:hyperf事件机制 出自老鄢博客 | 欢迎分享