Laravel简介

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。

在Laravel中已经具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM。它能方便的将“约束(constraints)”应用到关系的双方,这样你就具有了对数据的完全控制,而且享受到ActiveRecord的所有便利。Eloquent原生支持Fluent中查询构造器(query-builder)的所有方法。

Laravel 中 “规范” 的开发短信验证码发送功能需求场景

发送「验证码」或者「消息通知」,可发送到手机或邮箱中。

完成

首先,在 Laravel 中的规范就是使用 Laravel 的「消息通知」,这里基于场景为「验证码」。这个需求几乎所有软件系统都有使用到。

创建通知场景

第一步,使用 php artisan make:notification 创建一个通知类,创建成功后默认已经存在了三个方法 via、toMail 和 toArray ,因为是发送验证码,姑将这个控制类命名为 VerificationCode 。

然后创建一个验证码数据模型和数据表迁移,可以使用 php artisan make:model \"VerificationCode\" -m 直接快速创建数据模型和迁移。

ThinkSNS+的迁移如下:

第二步,打开数据模型类,在里面添加 Illuminate\Notifications\Notifiable 性状:

从代码里面,可以看到我们还添加了「软删除」,因为是基于手机号或者邮箱的验证码发送,所以不需要其他的内置花花肠子,也不需要记录到 「消息通知数据表」中,所以 routeNotificationFor 方法我们选择直接返回需要发送的账号(手机号或邮箱)。

加入工厂模式,快捷发送

打开 database/factories/ModelFactory.php 在里面添加一个关于通知数据模型的工厂定义:

这样,我们就可以通过 factory(\Zhiyi\Plus\Models\VerificationCode::class) 工厂函数快捷的创建验证码并发送通知。

为什么在验证码数据模型增加通知性状?

首先 Illuminate\Notifications\Notifiable 这份性状,Laravel 默认添加到 User 模型中的,所以通过 $user->notify() 可以快速的给用户发送一个通知,但是在规范文档中有这么一句话:

Remember, you may use the Illuminate\Notifications\Notifiable trait on any of your models. You are not limited to only including it on your User model.

这是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 首页的说明增加即可,先贴出我们的配置内容(为了减少文章字数,只保留阿里大于配置):

我门增加了一个 channel 配置,用于不同场景,例如验证码场景 code 以方便消息器读取配置。

然后打开 AppServiceProvider.php 在 register 中增加如下:

至此 EasySms 在 Laravel 中的集成已经完成,但是还没有开发实际功能,我们接着往下看。

开发 sms 发送频道

为什么要开发?首先,easy-sms 支持的很多,可以考虑单独为每个发送平台开发一个通知发送频道类,也可以采用只开发一个 sms 发送频道类,我们选择开发一个sms通知发送类,通过 easy-sms 的策略机制去多平台发送验证码。

首先,新建一个 app/Notifications/Channels/SmsChannel.php 文件,因为 Laravel 没有提供生成函数,这个需要自己创建哟,只要实现 send 方法即可。 SmsChannel 内容如下:

这样基于 easy-sms 的 短信通知发送频道已经完成。

开发场景发送消息

这部分完全属于 easy-sms 使用开发,我们新建一个 VerificationCodeMessage.php ,内容如下:

然后我们回到 VerificationCode 验证码通知类中,增加 toSms 方法,我的代码如下:

场景配置,例如验证码不同频道的 template 等,这样消息器就可以根据发送网关来判断使用场景的配置是什么。

再次吐槽,easy-sms 的契约设计也应该是这个思想,但是 getContent/getTemplate/getData 在实际网关调用的时候根本没有传递网关过来。。。

好了我们的开发完成了。

发送验证码

在创建验证码数据模型的时候就已经添加到「工厂」中,所以我们可以直接使用 factory 函数了,发送演示:

大功告成,easy-sms 是一个很不错的包哟。

上面代码都是来自于 ThinkSNS Plus ,看完整的开发代码可以看仓库:

总结

以上所述是小编给大家介绍的在 Laravel 中 “规范” 的开发短信验证码发送功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

php调用nexmo发送短信,在 Laravel 中 “规范” 的开发短信验证码发送功能相关推荐

  1. 如何在 Laravel 中 “规范” 的开发验证码发送功能

    需求场景 发送「验证码」或者「消息通知」,可发送到手机或邮箱中. 完成 首先,在 Laravel 中的规范就是使用 Laravel 的「消息通知」,这里基于场景为「验证码」.这个需求几乎所有软件系统都 ...

  2. php 两个类 相互调用_如何在 PHP 和 Laravel 中使用 Traits

    事实上,PHP 作为一门编程语言存在的问题之一,就是你只能使用单继承.这意味着一个类只能从另一个类中继承.例如,可能希望从几个不同的类继承方法,以防止代码重复.在 PHP 5.4 中 一个新的语言特性 ...

  3. 电脑qq服务器拒绝了您发送离线文件夹,电脑中QQ提示服务器拒绝了您发送离线文件如何解决?...

    QQ是很多用户都会使用到的一款沟通软件,其具有非常强大的功能,QQ离线文件发送功能就是其中一种.不过,最近一些QQ用户在发送离线文件时,却遇到了QQ离线文件发送不了,提示"服务器拒绝了您发送 ...

  4. php阿里大于验证码开发,阿里大于验证码发送 (ThinkPhp框架)

    1.登录平台 阿里大于 2.登陆之后我们可以看到资费,使用场景等,在进入正题之前我们需要一些准备工作,首先我们先了解下短信的请求参数,在这里我们需要注意的是sms_param这个参数,在接下来我们申请 ...

  5. Laravel中使用webhook开发Telegram机器人自定义指令

    Laravel使用Dingo API+JWT实现认证机制 无痛刷新Token 一.操作Telegram 1. 创建Telegram机器人 2. 创建command指令 二.安装[Telegram-Bo ...

  6. python调用excel的宏_在 Excel 中使用 Python 开发宏脚本

    文 | varlemon 编辑 | EarlGrey 推荐 | 编程派公众号(ID:codingpy) 之前发文介绍过一个叫GridStudio的神器,可以在网页版应用中将 Python 与表格处理结 ...

  7. Springboot+Redis接入腾讯云短信服务实现验证码发送

    目录 一.开通腾讯云短信服务 二.代码实现 三.测试 申请阿里云短信服务需要以上线APP或已备案网站,腾讯云短信服务可以使用微信公众号申请,注册个人微信公众号比较方便,改用腾讯云短信服务,参考官方SD ...

  8. 给未来写封信app服务器维护中,给未来写封信app

    给未来写封信,这款软件可以让你为未来的自己写一封信.其实写信的过程就是自己独处的一个过程,自己内心里什么想法,有什么是不愿意去面对的都可以在这一刻进行展现,只有去直面的面对自己的内心,以后的自己才会变 ...

  9. 公众号 接收手机验证码发送给用户

    要实现将网站的验证码绑定到公众号上,可以按照以下步骤进行: 在公众号后台开发者中心中,配置好公众号的服务器地址和验证token. 在网站的验证码接口中,将验证码发送到公众号的服务器地址上,并将验证码内 ...

最新文章

  1. 引入外部css_css
  2. android include 点击事件,Android编程之include文件的使用方法
  3. 专题:数据自治开放(下)
  4. Ubantu install jdk
  5. PCDN实现flash无延时直播的技术原理与优点 1
  6. 雷电模拟器 脚本_精灵盛典辅助雷电模拟器使用教程
  7. Cocos2D中图片加-hd后缀的说明
  8. 浅复制和深复制的区别?//浅拷贝和深拷贝
  9. 创新课程管理系统——测试心得
  10. vasp软件全名是什么_vasp软件主要功能
  11. 《深入解析Windows操作系统第4版》随笔记录03
  12. 互联网支付系统整体架构详解
  13. AspNetPager的使用
  14. stack(后进先出)
  15. 2021年浙大考研计算机专业录取分数线,2021年浙江大学研究生录取分数线是多少...
  16. Unity3D的3D音效的实现
  17. python里的非_python中或与非
  18. MySQL中CONCAT和GROUP_CONCAT方法的区别
  19. Gym - 100889H Hitting Points 计算几何+三分+二分
  20. Matlab中interp1()和interp2()的用法

热门文章

  1. python空行规则_交互式promp中的空行规则
  2. Vue Eslint语法检测工具
  3. 企业上云成趋势 看超融合如何开箱即用、一步上云
  4. layui 给table里面的添加图标_layui教程---table
  5. 计算机软件服务费分录,财务软件服务费会计分录是什么?
  6. html图片滤色,CSS3图片混合(Blend)效果详解
  7. 加载glove-840B-300d.txt出现ValueError
  8. EasyAR_实现AR涂涂乐
  9. PCB工程师级别评定标准
  10. 浅谈区块链技术应用场景