mirror of
http://124.126.16.154:8888/singularity/HyperfDevelopmentKitCore.git
synced 2026-01-15 03:25:05 +08:00
75 lines
2.3 KiB
Markdown
75 lines
2.3 KiB
Markdown
# SMS | 短信
|
|
提供一套通用 Service 用于定制需求,和一套现成的事件/监听器用于异步发送。
|
|
|
|
## 服务类
|
|
[\Singularity\HDK\Core\Service\SmsService](../src/Service/SmsService.php)
|
|
* 发送国内短信的 `\Singularity\HDK\Core\Service\SmsService::sendSmsCountryside()`
|
|
|
|
## 事件机制
|
|
> 这种方式无法监听短信发送的结果!
|
|
>
|
|
> 如果你需要根据短信发送的结果进行处理,
|
|
> 请使用服务类进行自定义
|
|
|
|
更好的方法可能是在事件发生后触发异步队列,
|
|
但如果将异步队列封装在本包中,
|
|
相当于强制引用本库的项目使用异步队列机制,
|
|
这是我们不愿意看到的。
|
|
所以这里的监听器只是集成了同步发送的操作。
|
|
|
|
如果你想要定义更好的设计,
|
|
你可以直接使用提供的 Service 类进行定制。
|
|
> 或许这里还有优化空间😄
|
|
|
|
### 事件
|
|
[\Singularity\HDK\Core\Events\SmsWillSent](../src/Events/SmsWillSent.php)
|
|
### 监听器
|
|
[\Singularity\HDK\Core\Listener\SmsWillSentListener](../src/Listener/SmsWillSentListener.php)
|
|
### 使用方法
|
|
监听器已经通过 [ConfigProvider](../src/ConfigProvider.php) 机制注册,
|
|
所以你只需要在要发送短信的地方调度这个事件即可。
|
|
> 这也就意味着,你无法调用这个事件,但不触发这个监听器。
|
|
> 如果你有这样做的必要,请创建一个自己的事件。
|
|
> 这也是为了保证功能的完整性和原子性。
|
|
|
|
具体使用方法,如下代码所示:
|
|
|
|
```php
|
|
<?php
|
|
namespace App\Service;
|
|
|
|
use Hyperf\Di\Annotation\Inject;
|
|
use Psr\EventDispatcher\EventDispatcherInterface;
|
|
use App\Event\UserRegistered;use Singularity\HDK\Core\Events\EmailWillSent;
|
|
|
|
class UserService
|
|
{
|
|
/**
|
|
* @var EventDispatcherInterface
|
|
*/
|
|
#[Inject]
|
|
private $eventDispatcher;
|
|
|
|
public function register()
|
|
{
|
|
// 我们假设存在 User 这个实体
|
|
$user = new User();
|
|
$result = $user->save();
|
|
|
|
// ↓
|
|
// 这里 dispatch(object $event) 会逐个运行监听该事件的监听器
|
|
$this->eventDispatcher->dispatch(new EmailWillSent(
|
|
target: $user->mobile,
|
|
subject: '注册成功通知',
|
|
type: 'html', // 默认 text 可以不传
|
|
content: <<<HTML
|
|
<h1>恭喜你,注册成功!</h1>
|
|
HTML,
|
|
));
|
|
// ↑
|
|
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
``` |