首先,在 Laravel 中的规范就是使用 Laravel 的「消息通知」,这里基于场景为「验证码」。这个需求几乎所有软件系统都有使用到。
然后创建一个验证码数据模型和数据表迁移,可以使用 php artisan make:model \"VerificationCode\" -m 直接快速创建数据模型和迁移。
[ThinkSNS+的迁移如下:
](promotion.aliyun.com/ntms/act/am…)
[第二步,打开数据模型类,在里面添加 Illuminate\Notifications\Notifiable 性状:
](promotion.aliyun.com/ntms/act/am…)
[打开 database/factories/ModelFactory.php 在里面添加一个关于通知数据模型的工厂定义:
](promotion.aliyun.com/ntms/act/am…)
这样,我们就可以通过 factory(\Zhiyi\Plus\Models\VerificationCode::class) 工厂函数快捷的创建验证码并发送通知。
这是Laravel官方文档原话,意思就是Illuminate\Notifications\Notifiable不仅仅是用在 User 模型上。
所以我们在验证码模型中添加 Illuminate\Notifications\Notifiable 是完全符合Laravel通知的正确使用的。
首先,在数据表迁移中存在一个字段 channel 也就是通知频道标识,我们可根据这个值来决定用什么方式发送验证码,而这个操作在通知类的 via 中实现的:
我们选择方式就是直接返回 channel 值,这个值可以是任何值,只要我们实现了这个通知频道,都可以发送,而Laravel已经内置和一些发送频道 database、mail 和 nexmo
其实,这个步骤我们要做的事情已经很少了,生产通知类的时候,已经完成了 toMail 方法,所以,我们直接修改其消息内容即可。
短信发送我们采用 overtrue/easy-sms 包,这是安正超开发的一个短信发送客户端,已经内置了很多短信平台,实现也很优秀。(吐槽:虽然有些细节有问题,例如不按照契约调用方法传递网关)
[首先依赖短信发送客户端包composer require overtrue/easy-sms然后新建配置 /config/sms.php ,内容嘛,就按照 easy-sms 首页的说明增加即可,先贴出我们的配置内容(为了减少文章字数,只保留阿里大于配置):
](promotion.aliyun.com/ntms/act/am…)
我门增加了一个 channel 配置,用于不同场景,例如验证码场景 code 以方便消息器读取配置。
[然后打开 AppServiceProvider.php 在 register 中增加如下:
至此 EasySms 在 Laravel 中的集成已经完成,但是还没有开发实际功能,我们接着往下看。](promotion.aliyun.com/ntms/act/am…)
[这部分完全属于 easy-sms 使用开发,我们新建一个 VerificationCodeMessage.php ,内容如下:
](promotion.aliyun.com/ntms/act/am…)
然后我们回到 VerificationCode 验证码通知类中,增加 toSms 方法,我的代码如下:场景配置,例如验证码不同频道的 template 等,这样消息器就可以根据发送网关来判断使用场景的配置是什么。
再次吐槽,easy-sms 的契约设计也应该是这个思想,但是 getContent/getTemplate/getData 在实际网关调用的时候根本没有传递网关过来。。。
[在创建验证码数据模型的时候就已经添加到「工厂」中,所以我们可以直接使用 factory 函数了,发送演示:
](promotion.aliyun.com/ntms/act/am…)
上面代码都是来自于 ThinkSNS Plus ,看完整的开发代码可以看仓库:
GitHub: https://github.com/slimkit/thinksns-plus
我有几张阿里云幸运券分享给你,用券购买或者升级阿里云相应产品会有特惠惊喜哦!把想要买的产品的幸运券都领走吧!快下手,马上就要抢光。