00:01
继续写。订单管理的功能啊。你们可能有疑问,不是写完了吗?怎么还要写?我们要做一下优化啊,就是我们这个发货一般呢,我们。呃,就是说你可以看一看,你在淘宝或者在这个京东啊,你购物的时候,如果商家给你发货了,会有一封这个邮件通知大家是不是,所以我们也要把这个邮件提醒给加上。哎。发货之后啊,邮件提醒。啊,要使用邮件提醒我们先创建一个邮件啊,邮件的一个类PP还是虚拟机里面项目目录下。Make,没有。然后是我们的邮件的一个类的一个名字啊,我们就是。呃,订单发货是不是order?可以吗?
01:04
好嘞。这样啊,就会在这个APP目录下给我们多了一个mail的一个类,有一个订单发送的一个。啊,这么一个邮箱发送的一个类啊。就是当我们使用邮箱发送的时候呢,它会去调用这里面的一个。就是说代码执行这里面的代码啊,就是渲染一个邮件的一个视图。哎,当然这个视图啊,我们。去创建一下视图目录啊。Resource里面view啊,可以看到view还是比较空的,因为我们写的是API项目,但这个发邮件。还是要写。去写一下的。来建立一个啊,在views里面去建一个。呃,Email的一个目录。Emails里面我们去新建一个邮箱的一个模板啊,PB文件。叫这个A杠。
02:00
Post啊,点blade blade模板啊。把这个删掉,因为我这里讲的可能就会稍微快一些,我们现在是项目阶段,不是说在学习这个基础知识,比如说邮件发送忘了的话,可以去看手册啊,可以自己去翻一下那个手册啊。去找到这个邮件发送这一块啊,综合话题里面找到邮件发送。啊,这里啊,自己忘了的话再去看手册都可以啊,我们这里项目就快速进行好。创建完我们的这个页面之后啊,就是在邮件发送的这个类里面。哎,我们加载哪个模板呢,使用order。啊,Emails emails下面的order post,好,接着把数据给传过去。啊,就是把我们的这个数据。订单的相关的信息给给传过去。对吧。来传一个这个order过去。
03:04
Do this?Order啊,我们在这里面定义一个order,因为它是类,所以我们要想向这个邮件的类里面去传这个数据的话,你只能通过这个构造函数啊。对吧,然后我们定义一个属性嘛。就是定义一个。啊,私有的水啊,就是说受保护的就可以啊一个order。在这里,哎,我们传过来的这个order就可以对内部的这个属性进行赋值,This。Order啊,等于外部传过来到这个order,最后我们这里就可以使用this order,把order啊给返回到这个我们的视图模板中啊,视图这个邮件模板中,这个模板呢,就可以去使用这个二的变量去展示一些数据。好吧。好这个准备工作,我们我们得先先准备好啊,接着呢,你以为到了这不就行了吗。
04:04
啊。对吧,我们要使用这个邮箱发送啊,使用这个邮箱发送怎么使用呢?使用啊mail的这个门面,门面发展使用它的这个to啊。To方法里面接收什么呢?接收一个。用户。啊,他就说用户的一个模型,或者是邮箱啊,或者是邮箱的数组啊,然后用户的集合都可以啊,也可以单发,可以批量发都行啊,啊这里为了测试,我们先把它写死,实际上应该是从。嗯,算了,不写死啊。从这个订单的这个。这里面啊,去获取他的这个就是说谁的这个订单,我们给谁通知,是不是因为订单和用户有关联,对吧?啊这里实际上。应该是,呃,拿到这个order里面的啊,User这个这样这样我们获取的就是啊,这个订单的这个用户的一个模型就可以了啊,你非要多此一举,你要取这个用户里面的这个email啊,也可以无所谓啊也可以。
05:07
这个是可以直接传模型的,对吧?好,这是to,就是给这个用户去发啊,然后使用send,诶你发送哪个邮件是吧,我们有很多邮件的类,发送哪个这里有啊,用我们的邮件的这个类啊。New,呃,Email啊,是我们的order order post啊,这个email把什么呢?把订单传进去对吧,你看这个订单你传到这个类里面,是不是可以被这个类的这个。勾到函数给接收,勾函数接收之后,我们这里是不是可以它就会啊,触发这个build方法去渲染这个邮箱视图,然后把数据传到页面中,这个页面中我们就可以用了,是吧?比如说啊,您购买的啊,这里我简单的写都用P标签吧。拿灯P标签好您购买的商品。嗯,是您的订单吧,您的订单。
06:04
然后。就是说您单号为啊。单号为。呃,把。布雷的模板要要这样去用啊,用这个变量order里面的。Dota。里面的我们的单号给写上。呃,我看一看这个单号的这个这个。字段是什么呀?有点忘了。是这个order啊,刚刚。啊。继续改我们的这个模板,哎,您单号为这个啊的订单已经发货啊,已经发货。好,先这么去写啊,先这么去写,先看邮件能不能发送。嗯,这里我们定义了一个邮件类,哎,就是说去。
07:00
使用这个邮箱模板,然后把变量传到这个。把这个order订单信息传到这个模板里面啊,视图模板里面,这里面去使用好,然后在控制器我们这边发货成功之后去发送这个邮件啊好。啊,看似没有什么问题啊,但是我们忘了最重要的最核心的一步啊,我们的邮箱并没有去配置是不是?你现在邮箱你这没有任何配置呢,你怎么发什么配置都没有呢啊。说明你怎么发。对不对,你看邮箱的这个con。然后它默认使用的是SMTP的这个驱动吗。对不对,SMTP的这个驱动。然后使用的我们这个EV里面的这些配置是不是都没配呢?啊,我们要先配置一下才能发送啊,怎么配置呢。嗯。找个这个啊,邮箱任意邮箱都行啊,这里我拿三六这个163的啊,找到它的这个设置啊设置。就是设置里面。啊,找到这个设置啊,就是这个,然后你要把你的这个mappsm TP服务给开开啊,我这已经开启了。
08:06
好开启之后呢。他会给你个授权码。啊,当然这个授权码呢,我你给你显示过一次,它就不显示了,所以啊,当然我没有记住,我等会再新增一个。啊,知道吧,然后这里有我们的SMTP的这个域名,因为我们使用的是SMTP啊这个驱动,所以我们就复制这个域名就可以了。清楚吗?好,我们一个一个来先填我们能填的参数。来先把什么填上驱动我们使用SMTP啊地址。你用的是哪一家的邮箱,你就找去他们这个后台啊,这个邮箱设置里面去找对应的地址就行,端口啊,一般使用465啊。然后。你邮箱的账号啊,也就是我们这个邮箱的这个账号看到了吧。我能不能复制一下,能复制啊邮箱的账号。哎,密码密码不知道呢,不是你邮箱的登录密码啊,你像这种第三方的这个,我们这个项目就属于对于这个邮箱来讲,就是第三方对吧,第三方你要使用他的这个邮箱的一个,呃,认证的话,你要使用这个授权码。
09:09
兄弟们,你输入你的邮箱密码啊,不行的,以前就是很早以前可以啊。但后来就大家为了安全就不行了。是不是啊,那个密码我们先空着,等会增加一个授权码就可以了,接着看看还能填什么啊。啊,密码控制加密方式一定一定要有吧,因为我做过很多次。呃,这个尝试我不加这个加密方式的话,邮件发不出去,因为现在他们协议都使用啊,APS使用那种SSL加密啊,所以还是会有一些问题,所以加上吧大家。好,这个就是发件人,也就是啊,我们是。从哪个邮箱给他发给这个用户的啊,我们这个就写写这个就可以了啊,接着是我们这个发送人的一个姓名。也就是我们是谁发给他的?啊,一般是用我们的项名啊,这个项目来来命名,比如说我们的这个商城啊。
10:02
XX的商商城啊好。这样配置就完了,是不是剩个这个授权码啊,授权码来这个找找这个获取一下。嗯,你会发现啊。其实我开了两个浏览器,这里面一个邮箱对不对,这个是我用来测试这个收件的啊,这个是A1啊,这个是我用来做这个提供这个我们系统发件发邮件的服务的,这个账号是A2啊。当然测试这个书店呢,是什么都不用管,让他在这开着,等会发完我们去刷新就可以来增加一个授权码。啊。嗯,我要去扫码去发送。一个短信啊才可以。我现在去扫码。他这个需要安全认证的。好,邮箱我已经发送啊,不是是短信我已经发送。认证通过啊,授权码只显示一次。
11:01
啊,当然你们记也没用,后后面我视频完了这些我都会删掉的。复制一下。粘到这里面啊,这样的话,邮箱的配置基本上算是完事啊。那就可以开始开开心心的发邮件了,对不对,我们要给这个订单的这个用户发邮件是吧?啊这里给大家说过了,这个to你写邮箱也行,User的这个模型实例也行,对吧?User的这个模型实例的集合也行,然后是邮箱的集合也行,都可以,我们当时给这个订单,给这个谁谁创建的这个订单是吗?谁付的款,我们给谁发通知吗?是不是它会对应的去找这个优势模型里面的email字段去给他发,但是。我们这个用户不对啊,这个用户这个邮件。我们随便写的,没法测试是不是好。确定确保对应起来,我们先看看这个订单啊,订单这个UID是一是不是。然后找到一这个用户,然后把他的邮箱给改了去,改成什么,改成这个我们这个A1用来测试接收邮件的这个邮箱。
12:00
好吧,你不要搞混了,我这个是。A1啊。然后这个隐身模式黑框是A2用来做邮件发送的,为什么用那个隐身模式,你如果不用隐身模式。你同样的一个浏览器下,你你去访问这个同样的一个网站,对吧,你账号这个筛选它是维持住的,所以我开了一个隐身模式才能去登录另外一个账号啊,当然你开两个不同的浏览器也是可以的。好吧,啊。呃,我已经复制了这个A的这个邮箱,去改我的数据库。啊。来。把这个关掉啊,关掉这里会多出来一个这个东西。好提交了已经啊,你现在再刷新也是这个邮箱,那现在。啊,我就去。给他发送邮件啊。还是一样,直接去请求我们这个发货的这个接口就行了,虽然已经发过货了,我现在就在测试嘛。好。报错啊,淘淘频过期啊,这个登录一下就可以了。
13:01
直接。的。来复制一下这个talking。啊,给他更换一下啊。接着啊。啊,还是我们的这个。发货的这个结果啊,这个参数我们填错位置啊,实际上应该填到这个包里面的,但是不影响我们测试,先这么测啊。一直在等待他应该是在发邮件了,因为发送邮件是比较耗时间的,好。刷新一下啊,是给他发的,看有没有收到我们的邮件,是通我读FS商城是吧,好。他说我这个单号为什么什么的订单以发货对不对,嗯,这样就我通过这样简单的一个信息,嗯,大家就可以看到邮件发送了,当然这个模板里面你可以任意的去完善你的信息啊。自由发挥你的想象啊,比如说啊,包含的商品为。
14:01
来我给他写个一,它是支持这个标准的,这个HL格式,还有这个样式的,现在样式的。啊,H1写个H3吧。H4就可以了。好。其中包含的商品为。啊,商品。写个ul,把我们的所有的这个商品给它列出来,这个订单里面所有商品。啊,在这说一起。循环谁循环?这个订单里面的。啊,所有的订单的一个细节。DS啊。As啊?D。接着,End for。
15:02
然后去显示什么呢?啊,循环输出这个Li吧,啊包含的商品为。从细节里面去取出来,用他的这个商品的一个关联。啊,去取出来这个商品的一个名字。哎,抬头好。然后。再写个逗号啊。单价,单价为啊。数量为好,这样啊。来单价单价这个表里面直接存的就有啊,这个表里面直接存的就有。来它里面的plus是不是数量,它里面也有啊,里面的那个number。
16:01
好,呃,这样就可以了,他会把所有的这个这个细节关联的商品,还有它的单价数量都显示出来。当然你想展示其他信息,可以写的详细点,比如支付方式啊,支付的总金额啊都可以啊。啊,比如我们在这里加个H5啊总付款。总付款是不是在O里面记记住着呢,啊是这个吧,A mont amount。看一看。是的,就他。接着去这个页面里面写。啊,但这里需要注意一个问题啊,你看这里我们循环就是说去查它关联的这个商品,假如我们这个订单里面包含了1000个商品呢,这里是不是要循环1000次啊,所以不要循环去查。知道吧,我们可以使用这个。
17:01
啊,这个预预查询啊,好,那怎么使用查询呢?你当然是可以在这里写好,提前做好查询之后再返回数据,是不是可以在这里提前查好啊,再返回数据啊,其实呃,还可以简单的写,简单的写。就是在这里我不直接通过这个属性去拿他所有的一个数据啊,我拿到它的一个这样的一个。啊,查询构造器,然后使用它的位置方法,让它直接位置这个故子,啊,然后get获取所有。这样的话,这样的一个结果啊,就相当于通过这个查询工作器去关联了这个它的相关的这个商品。知道吧。啊,这个结果。一样的啊。然后再循环这样这样的话,这里都查出来之后,这里就不不去请求数据库了,就是从属性里面去取了。可以吧,来,我们发送邮件尝试一下。
18:02
他要转转转,要等半天啊。没有这个方法。订单里面没有这个方法啊,订单里面我们定义的不是这个方法是我记得是order details啊。确认一下。啊,这里我应该定义的是这个方法啊,不是那个方法。来改一下啊,是order details。As啊,这样是可以的。这个记错了。来再发送。走走哎,204发送成功,来去我们的邮箱看一下啊。收件箱。刷新一下。哦,有声音响了来了啊,右键。你看是不是我们的这个订单单号为他的已发货,然后包含商品为。啊,这个,然后单价是数量是这个对不对,总付款啊,当然你可以把界面写的。
19:05
好看一些啊。这里我们就不在页面上去费这个时间啊,现在邮件发送大家已经会了,是不是啊,但是你会发现一个问题,我每次发送邮件等好长时间呀。你看我要等一秒两秒。啊,如果网络慢的话,可能等三秒四秒。啊,这样肯定是不符合这个实际的一个业务的一个场景的。知道吧。所以我们怎么办?我们班一般把这种比较耗时的,像短信发送,邮件发送,我们放到一个队列中,让他在后台慢慢去发就可以了。啊,我们要及时的给用户操作,他反馈是不是好。那使用队列呢?找到我们控制器啊。只需要把这个肾啊换成。啊Q有使用队列去发送就可以了,当然这个是使用的是默认的队列啊,如果我们指定队列呢,就是可以使用那个其他的方法,比如说on。
20:02
去指定一个队列。啊,这个所有的这个使用在手册上面都有啊,都有手册里面都有啊,自己去看如何使用这个队列,我不说了啊,但是你要使用队列,你有个前提,就是你队列得是正常的。能运行的明白吗。啊,所以现在。啊,因为我们是新的一个项目,我们队列应该还没有配置过,我们去把队列给配置一下,要不然用不了。来找到队列这一块。啊,有几个配置的一个地方,一个是我们使用的一个驱动。驱动呢,这里我们使用这个数据库就可以了啊。比如连接。还有它的这个驱动,驱动我们使用数据库。嗯,你也可以使用使用其他的,我们使用数据库呢,你就要先。生成这个。啊,这个队列的迁移文件来执行一下,在终端里面啊。没复制上。
21:04
好生成队列的迁移文件,也就是说它这里会生成一个迁移文件,在。每个微信里面啊,是不是有一个jobs的一个签文件,假如我们的邮件发送,它会把我们的这个啊。要发送的这个邮件啊,这个就说这块的一个功能给放到这里面去排队,哎,这样多人的情况下啊,甚至你发的邮件比较多也不会说啊时间很久,他在这里面排队,慢慢发,发一个他去删一条记录,发一条发一条删一条记录啊当有失败的这个任务怎么办呢。他会放到这个。啊教里面这个是我们一开始执行迁移就有的啊。好,这个是我们待处理的一个队列,这个是失败的一个队列啊,这两个表。当然我们得现在只迁右文件,我们得执行迁移才能生成这个表,是不是啊。创建了这个一个交表对吧。小心点啊。好,这两个表啊,一个是存失败队列的,一个是存正在进行中的一个队列。
22:05
那。这个。表我们创建完成了啊,当然我们要使用数据库的驱动,还要去改一下队列的配置文件,我们先看看这个队列它默认使用的是哪个驱动。找到config。找到队列这块的一个配置。啊,它默认使用的是这个啊,所以我们要去E里面把它改成database。啊,使用这个驱动,我们要。兄弟们。来找到EV。啊,搜索啊,直接搜索这个配置,把它改成dab啊,使用数据库的一个驱动好啊,这样完成以后。还只是我们配置完了啊,还要干什么呢,看一看。还要去?啊,这个创建任务我们就不用创建了,我们使用邮箱自带的这个队列功能就可以了,也就是说你比如说你执行其他一些耗时任务,你可以去创建对应的这个队列的一个。
23:01
啊,任务类在我们队列的任务类里面去使用队列啊,要执行的一些功能啊,邮箱我们就不用了。啊,接着我们要运行这个队列啊,运行这个队列好直接使用这个命令运行队列。来要在这个终端下啊,执行这个命令,再复制一下啊。现在这时候队列它在一直运行着,接下来我再去发送邮件,你看看速度快不快。一点击。是不是很快就给我响应了,之前我们没有配的时候,是不是邮件他要等个两秒三秒那样。啊。来这个邮件我们先不用管它,邮件是肯定能收到的啊,邮件是肯定能收到,就是快慢的问题了。你刷新一下邮件是肯定能收到的。这我们就不看了。啊,主要是我们来感受一下这个速度。现在是使用队列的。看一下速度是不是很快。
24:00
好,作为对比啊,我们把那个队列先给关掉,使用普通的这个send的,你再来对比一下速度啊。一二。当然这个网速比较快,你感觉不出来,但是细微的差别还是有的。啊,看这个时间就稍微长一点,是楚吧,来再对比一下这个队列的。嗯。是不是立刻就好?啊,当然经过这么一波操作,我应该是收到了很多邮件啊。是不是啊?这个邮件就是我们的这个内容就不看了啊。这就是使用对列好处。啊,我们使用的邮箱的一个队列。但是我们会发现一个问题啊,你看。这里,哎,正在启动这个邮箱的一个,就是说这个队列的一个进程,然后哎这个。队列执行完毕啊,执行中执行完毕,执行中执行完毕,是不是他在终端中,我们在这里开着呢,如果我意外的我CTRLC把终端给结束了,是不是队列就挂了,我队列用不了了是不是。
25:03
啊,那肯定不让他出现这个问题啊,所以手册上都给解决方案了,配一下这个。去配一下这个守护进程啊。找一下那个守护进程。他啊他。啊,我们使用的是homes的,所以这些都都安装过了,我们只要去建这个配置文件就可以了啊。是吧,也可以去看一下这个守护进程的这个现在的一个状态啊,速度up啊ctl啊。好。现在呢?呃,有两个这个正在监听的这个队列是其他项目的啊。你不用管啊,不用管,其他项目的不用管。我们去创建我们自己的这个项目啊。然后在我们的这个,就是说这个守护进程里面这个目录下。啊,去创建一个这个文件啊,当然这文件名我随便命名啊,啊,尽可能的和别的项目给区分开就可以了啊。
26:02
啊,要使用速度权限,管理员权限。CD到这个目录。啊,CD到这个目录啊这里面。哦,CD可以直接啊,直接直接CD就可以了啊好,这里面是不是有一个有的,这是其他项目呢,我们现在去啊,创建我们自己的这个配置。好吧,当然。呃,你直接你在Linux里面你改文件不方便啊,不方便怎么办。是不是我们随便去啊,来把这个称称全部最小化,我们随便去桌面创建一个记事本啊,文件名无所谓啊。把这个粘这啊,我们在这个里面去改啊,去改配置,然后改完之后直接粘贴到那个Linux里面不就完了吗?你要是不会使用Linux的编辑器的话。就不用再为难自己了。把这个删掉啊啊,接着瞅瞅它的一些配置,其实这些配置呢,在手册上也也都有说啊。
27:01
一个是你进城的名字不要和别人一样啊,我们的是校啊,改成校。啊,效果一篇。好。然后进程的名字。你的这个命令所在的一个位置。啊,这个后面我们就不要了。比如我们命令是在哪呢?是在后。看一看我们的目录吧,就是也是我们项目的这个目录啊,它的这个目录。好。它的这个目录呢,你如果不清楚啊,你就先啊CD先回到这个加目录是吧,然后LSCD到这个扣子里面,LS把CD到我们的项目目里面,好,这是我们的项目对吧,你PWD你就知道你的项目的目录在哪了,看到没有复制它。就复制它。把这个给给换掉啊,把这块给换掉,加个斜杠,也就是说你你执行你项目目录下的这个R3清楚了吧,因为这个是一个后台的一个脚本进程,所以你必须得用绝对路径,你不能用相对路径了啊,之前我们PPR特开启队列直接这么用的是不是,它是不是相当于就是当前目录下的这个R。
28:10
对不对,可以用相对路径啊,那我们这个计划任务作为后台的一个脚本的话,你用不了相对路径了。所以得用绝对路径啊,这里是,然后你看这个命令其实跟我们的这个命令是一样的啊,跟我们启动队列那个命令是一样的。接着看还改什么配置啊,这个就不用管啊,包括用户用户你再改改啊。我们没有这个用户的,我们现在只有威德的用户。啊让就是说让哪个用户执行这个队列,肯定要威格伦特用户了,这个项目都是他写的,是不是就是这个用户写的啊。Linux对这个用户和权限管理还是比较严格的。好开启的进程数两个进程就可以了,你开的多的话比较占你占你的性能,但是你根据实力。你的业务需求去做改变吧,好吧,好,你的日志的一个目录啊,日志也改成我们的项目啊。改成我们项目啊,不直接在我们的项目目录下去生成。
29:04
叫什么在我们的项目目录下的这个。Storage里面的logs,我们把它生成到这里啊,然后去这里可以copy啊,复制它的这个pass。复制什么呢,复制。复制这个pass啊,你看。这个pass。好粘贴过来加个斜杠啊,我们把。就是守护进程的这个日志写到这个里面啊,写到我们这个log里面,好,这样就没问题了啊,不用保存就全选复制。那先先。看一看去哪去编辑这个文件,去这个目录下对吧。来CD到这个目录下。啊,又坚持三天啊,CD到这个目录下,然后。呃,去创建一个文件,文件名随便啊。啊,这里我们使用使用拉编辑器吧,这个编辑器是比较简单的啊,文件名,比如说我们的校啊API点注意这个文件结尾,结尾一定要是点。com.com结尾,不然啊super就是这个手进程,它加载不了这个配置啊,一定是点com结尾。
30:12
清楚吗?好,这个就是比较简单的一个编辑啊,接着我们复制这里面,我们改好了这个内容啊,粘贴过来啊,右键就粘贴了。诶,这个编辑器我想想怎么粘贴的啊,先粘先复制,然后右键粘贴好有了是吧。你说你看一下啊呃,直接你CTRL加X退出,退出的时候它会问你是否保存。啊,CTRL加X,然后你就直接回车啊,输入个Y,然后再回车就可以了。清楚吧,他告诉我没有权限啊,没有权限,那没办法,那只能。X,那我先退出再说啊,因为我们现在是普通用户嘛,Dota服嘛,所以你要加速度啊才能去改这个文件。No shop API点康复。
31:02
那右键粘贴。然后CTRLX。啊,CTRLX输入Y回车。好在R就多了一个我们这个配置文件,是不是现在只是创建好了配置文件。就是我们得重启我们的守护进程才可以,包括你现在你去啊,速度你去看一下,哎,我们守护进程的这个状态是不是没有刚才我们写的这个吧,啊所以。啊,有几种方式,你看他手册上提供了什么方式呢。是使用这个update啊,这三个都可以,但是你就使用中间那个就行了,直接把所有的重启一遍就可以了,你或者说你启动start指定的你的这个配置也行啊好或者是使使用什么呢?我一般嗯,你也可以直接使用这个,比如说rest的哦啊重启所有都可以啊,啊我们使用什么呢?使用它这个。Update啊,更新。啊,不对称啊,前面是有一个这个命令啊。
32:00
回撤。好,他说把它已经添加到了这个进程组里面,哎,接着我们去查看一下他的状态space。哎,是不是我们的这个正在运行中,对不对。看到没有啊,之前这个是别的项目呢,已经fail已经这个失败了啊啊先不用管它,我们是在运营中啊,你看running啊,这个时候我们就不用再去在这里终端里面去开启这个队列的这个命令啊,我们来测试看邮件能不能发送。好吧。哎,就是看看我们队列好不好使,先把这个全选删掉啊,没有邮件了是吧,删了啊。来。发送邮件。好,很快就给我响应了,然后这个邮件可能还要一会儿才到刷新一下。是不是收到这个邮件了。啊哎,我们的队列加上这个守护进行已经全部完事了,守护进程呢,它会帮我们去守护这个队列,当这个队练意外终止的时候,它会自动帮我们重启。
33:00
好吧,好。这样哎,我们发送完成之后,就是发货完成之后,就可以发送邮件去通知这个用户,并且我们还使用了队列,不会影响我们的数据的一个啊,就是响应的一个速度啊,就是。他使用队列到他这里,把它放到队列就不管了,直接跳过开始给我们返回了,对吧,你不用管它执行的一个时间。哎,这有队列运行的一个啊,一个日志啊,你看运行中运行完成对不对,这刚才我们运行的那个。邮件发送那个好?啊。可以啊,这样就可以了,但是其实我们还可以优化啊。怎么优化呢?我们可以去使用这个事件啊,把这个发货就当成一个事件,去处理发货的一个事件。真的吗?
34:01
那这时候我们就是把这个事件也给用用用上啊,事件给用上,也就是说呃,我只要这里参数验证通过之后,我就直接触发这个发货的事件就可以了。是不是?好,要使用事件呢,你得先创建这个事件,我们去找一下手册,你看看这个事件是怎么用的啊。找一下事件系统。啊,事件它分两部分啊,分这个事件,还有监听器也是我们,呃,事件是独立的类,然后还用监听器去监听啊,这个对应的一个事件。呃,快速的去创建这个事件和监听啊,可以使用一个命令是乙位乙N体啊冒号。使用它啊,使用这个命令啊,可以给我们。去生成啊,这个事件和监听器来我们创建。民府之上啊。
35:04
没有复制上。整体啊。啊,这个目录不对啊,目录不对,先回到我们项目去,我们项目是在。嗯。加目录啊,加目录下先直接CD吧,然后CLS看一下啊,CD的扣的里面的shop,这是我们项目目录下,然后再执行我们这个命令啊。啊,这个命令。会在这个我先把它折叠啊,在APP下给我们创建一个。没有啊,搞错了,再来看手册啊。他说是我们要啊,在这个provide里面去添加我们的事件之后再去执行这个命令,才会给我们生成。清楚么?啊,所以我们去。这个provider,然后事件的这个provider里面去添加我们的这个监听啊。
36:02
这个比较多啊,直接复制手册吧。就是这里啊,把我们的这个监听啊给。就是把我们要监听的这个事件。啊,给注册到这个事件的这个service provider里面啊。然后我们再执行那个命令,没有的话,他会给我们创建啊,创建这样的一个类啊,啊把名字改一改,我们的是。呃,事件是order。Post啊,就是发货的一个事件啊。然后我们的这个监听啊,监听是。啊,改成这个sent email吧。Well to order user给。这个发送邮件啊,给这个订单的一个用户啊,这么一个监听,监听者啊,这是我们事件的一个名字。
37:00
退,就是说发货的一个时间啊,接下来我们再执行刚才那个命令,就会根据这两个配置给我们生成对应的监听者和时间。啊。往上走啊,去执行一下这个命令。哎,成空之后再去看我们的这个APP目录,你看就多了一个事件,是不是还多了一个这个监听者的一个目录,是不是和我们名字对应的,对吧。是不是好?啊,这是我们的这个事件啊。然后啊,这个是我们。监听者监听者。这里面的代码就是。我们要执行的这个。一个代码。看这里。这里是不是使用了我们的啊,这个事件对吧,那它们之间的关联是在哪关联呢?就是我们的。啊。事件的这个P,你看在这里注册的,也就是说要使用这个监听者去监听这个事件是吧,你会发现它是一个数组,也就是说是可以有多个监听者去监听同一个事件的。
38:06
清楚没有啊。所以说啊,我们这个事件的代码基本上不用怎么动,主要是去改我们的监听者的代码啊,这里呢,是我们实际上执行的这个代码。好来,接着去改我们的发货的一个逻辑啊。啊,发货啊,那我。就不在这发货了啊,我直接发货时间啊。好那个我先先不先不那什么啊,先给你们留着,你们可以做一个对比去参考啊。把它先注释掉。发货啊。好。这个我就先不用了啊。我们这里使用事件啊,去分发。
39:03
使用事件。啊。之前说过啊,我们这个监听者这里面实际上是执行了我们具体的一个代码,对不对,所以我们要在监听者里面去执行这个代码,对吧。哎,这样当我们触发这个事件的时候。就可以去出发啊这个。相应的一个代码啊,去执行啊,现在当然去缺一些东西,我们就是说去。啊,引入就可以了啊。接下来啊,把我们需要的数据处理一下,需要一个订单啊,首先把那个邮箱先给它命名空间引入了。找到它这个better回回车之后,会自动给我们引入啊,然后我们的这个order post all the post。注意是mail啊,不要引错了,我们现在有很多同名的,比如说还有这个事件,还有这个们发送邮件,这里使用这个。
40:00
啊,邮件这个啊,因为这个还是我们发送邮件的这个代码嘛,啊接着去改什么order是order,没有order我们传进来。啊,然后定义一个属性去接收嘛,因为它是类嘛,类你只能这么去接收了,对吧。Protect。Order。This。等于DOTA2。啊,还需要一个什么,需要一个request是吧,要从request里面去获取这个数据。他说你可以传这个指定的一个数据。啊,比如是把这个。他给传过来啊,然后再传一个他啊传这两个数据。这样的话,你还得去多写一些。属性啊,多写一些属性才行啊。
41:04
把这个改一改啊。因为不用传request request它里面包的东西很多啊,当然你直接传也行。接下来去改下面的这个数据啊,Order。就是this啊,This。这个都要换啊,这个都要换,改成Z。嗯,这个变量的话,就是也是类似啊。从类里面我们去获取这个数据,因为是通过它传过来的嘛。等会我们再说怎么触发分发这个事件。再复制一个这个东西,看一下它啊,好这样的代码就跟我们之前在那个外面写的一样啊,写的一样。就是只不过我们把是order还有这个需要的一些数据传了过来,对吧。
42:03
包括这个奥这个模型。啊,基本就改完了啊,这时候我们来看看怎么去分发这个事件,也是在我们去分发这个事件的时候啊,它就会啊触发啊看看这个啊,就在我们分发这个事件的时候,它就会触发它相关的就绑定的这些监听者,那我们代码就在这个监听者里面写着呢,就是会执行我们的这个代码。叫什么?啊。来看看怎么去分发事件,分发事件可以直接使用这个啊。E为ENT啊。辅助函数啊,直接去。分发啊,创建一个。有一个事件。注意啊,是这个。Event这个类啊,这个类不要去用到了ma,因为这俩名字刚好一样了。啊,这样去分发这个事件啊,这里面传入我们需要的参数,就哎我们的这个。
43:02
不对啊,这里写错了,我们是调的是这个事件啊,是把参数传给了这个事件。啊,是把参数传给了这个事件啊,我们先写啊。等下给他改一下就可以了。写错了。Request里面的类型以及request里面的。单号啊。参数比较多的时候,你也可以考虑换一下行啊。好。啊,我们是传给了这个事件啊,传给了这个事件啊,所以是这个事件里面。啊,去接收的这个属性。清楚了吧?啊,时间里面去接收这个属性。之后呢,事件里面接触这个属性之后呢,我们这里看lesson,它这里引入了这个事件,所以可以直接从这个事件里面去获取相应的一个属性,所以我们这里写错了啊,这里写错了。
44:00
剪切一下。啊,是要放到这个事件的这个属性里面。然后接着接着剪切啊,包括我们这个这个复制啊,都都都剪切一下,改一下很快的。来。还有这里面啊。这里面啊,这样就对了啊,我们这里去调用啊,这里去调用的是这个事件。啊,分发的时候我们使用的这个事件嘛,是不是。啊,使用的这个事件类啊,接着是把这个参数传给了这个事件啊,这个类嘛,所以是这个类的构造函数去接收啊,我们传的这个数据。又因为我们的监听者。它呢,在这个里面ho里面,它是引入了这个事件啊,引入这个事件,所以我们可以从这个事件这个对象里面去获取。啊,从这个事件这个对象里面去获取它的这个属性。
45:03
它的这些属性清楚了吧,是这么回事儿。按这里来讲,能公开你受保护着它,它不一定访问得到啊法不啊好,这样就没问题啊。呃,那这里就不是this,而是疑问。啊,都是事件里面的这些属性。啊,这样就没事了啊,哎,这里注入了这个事件,然后使用事件的这些属性,而事件里面的这些属性,它的值哪来的呢?是我们在这里去,呃,你用这个事件类给传过来的啊,这样就连上了。好。来测试一下。看看能不能发送成功邮件。先把这个啊关掉啊。先把这个邮件呢,收件1000块钱全删掉啊。啊,就这一个吗。
46:00
好,就这一个。删掉。接着来请求。看看我们事件生不生效好。刷新一下邮件。是不是邮件收到了对不对啊,包括我们的这个数据库也会更新啊。啊,这里你看也会更新这个数据库吗。啊,这样我们就通过这个事件的方式,就完成了我们的这个。哎,后续的一些逻辑对吧,这个是使用事件,你问的事件辅助函数还可以使用什么使用啊,直接使用这个事件啊。使用事件辅助函数分发啊,还可以直接使用事件。啊,分发直接使用试验分发使用我们的order。找到。一定要选选择到这个事件的这个类啊,别选择你邮箱的这个类了啊。
47:04
选到这个事件里之后,它有一个dispatch。使用它进行分发,然后里面传我们要传的这个参数就可以了啊,这三个是我们要传的参数,我们把它传过来。传给他啊,这样就可以。那我们也可以再测一下,最后测一下就完事了啊,先去改一下数据库。找到订单这块。把数据库呢,我们把状态改成二已付款,然后。啊,这个类型不写单号不写。类型不行来提交一下。那刷新已经改过了是吧,好,接下来。发货。诶,发货完成。呃,先看数据库有没有变,变了是吧,说明事件是没问题的,接着看邮件有没有收到。回收件箱。嗯,刷新一下。是不是收到了这样一条新的邮件啊,稍微总结一下。
48:00
啊,我们这样一个发货的一个功能,其实很简单,就改了他这个参数,对吧,但是我们想把体验做好的话,我们要发送邮件对不对,你发送邮件,邮件会占很长的一个时间,我们不能就是说。影响用户的体验啊,我们后台使用也是用户啊。对不对,我们不影响后台使用的一个体验,怎么使用队列。然后对练啊。使用队列呢,当然可以直接在这儿去发送这个啊就可以了,其实到这儿也可以结束了。啊,但是为了我们的呃,代码啊,就是写的更规范一些,我们像这种比如说下单的一些事件呀,比如说发货的一些事件。啊,我们尽可能去用事件去完成这些事情。啊。一个是维护起来非常的一个方便。这样我们订单相关的功能才是真正的啊写完了。不要忘记去把我们相关的API的文档都写详细。
我来说两句