在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加入群聊,欢迎一起研究技术
转载请注明:hyperf事件机制 出自老鄢博客 | 欢迎分享