# 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 save(); // ↓ // 这里 dispatch(object $event) 会逐个运行监听该事件的监听器 $this->eventDispatcher->dispatch(new EmailWillSent( target: $user->mobile, subject: '注册成功通知', type: 'html', // 默认 text 可以不传 content: <<恭喜你,注册成功! HTML, )); // ↑ return $result; } } ```