路由控制器
发送邮件验证码路由
更新邮箱的路由
1.配置邮箱
.env
MAIL_DRIVER=smtp
MAIL_HOST=smtp.163.com //这个是你用的哪里的邮箱,就用他们的地址
MAIL_PORT=465
MAIL_USERNAME=12621@qq.com //邮箱的账号
MAIL_PASSWORD=ANNSDEDJJDJ //授权码
MAIL_ENCRYPTION=ssl //加密方式, 协议是https,都是ssl加密方式
MAIL_FROM_ADDRESS=12621@qq.com //发件人, 从哪个邮箱发给用户的
MAIL_FROM_NAME="某某商城" //发件人的姓名
这里是要将你的邮箱的smtp服务开启
2.配置队列
database 队列驱动,你需要一张数据表来存储任务。
运行 queue:table Artisan 命令来创建这张表的迁移文件。
当迁移文件创建好后,你就可以使用 migrate 命令来进行迁移:
php artisan queue:table
php artisan migrate
更改queque队列配置文件: config\queue.php
'default' => env('QUEUE_CONNECTION', 'sync') // 这个不用动
// 在.env中找到 QUEUE_CONNECTION 改成
QUEUE_CONNECTION=database
运行队列, 但是这里有个问题,如果这个的进程被关掉就不能运行了, 所以使用运行进程Supervisor
php artisan queue:work
Supervisor
地址: 队列 |《Laravel 6 中文文档 6.x》| Laravel China 社区
sudo apt-get install supervisor
Supervisor 的配置文件通常位于 /etc/supervisor/conf.d 目录下。
在该目录中,你可以创建任意数量的配置文件,用来控制 supervisor 将如何监控你的进程。
例如,创建一个 laravel-worker.conf 文件使之启动和监控一个
[program:shopapi] //进程的名称 不要和别人的一样
process_name=%(program_name)s_%(process_num)02d
command=php /D:/phpstudy_pro/WWW/antDesignProLaravel/laravel/artisan queue:work // 命令的位置
autostart=true
autorestart=true
user=forge // 用户; 终端前的那个用户
numprocs=8 //进程数
redirect_stderr=true
stdout_logfile=/D:/phpstudy_pro/WWW/antDesignProLaravel/laravel/storage/logs/worker.log // 守护进程的日志
进入/etc/supervisor/conf.d下
然后创建文件, 把上面的复制进去, ctrl+x 退出保存
cd /etc/supervisor/conf.d
sudo nano shopapi.conf
启动 Supervisor
sudo supervisorctl reread
sudo supervisorctl update // 这个就行
sudo supervisorctl start laravel-worker:*
生成事件和监听器
// 先到App\Providers\EventServiceProvider 这个类文件中添加
protected $listen = [
// orderPost 事件名
'App\Events\orderPost' => [
// SendEmailToUser 监听事件名
'App\Listeners\SendEmailToUser',
],
];
php artisan event:generate
OrderShoped.php
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;
class OrderShoped
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $order;
public $express_type;
public $express_no;
/**
* Create a new event instance.
*
* @return void
*/
public function __construct($order, $express_type, $express_no)
{
$this->order = $order;
$this->express_type = $express_type;
$this->express_no = $express_no;
}
/**
* Get the channels the event should broadcast on.
*
* @return \Illuminate\Broadcasting\Channel|array
*/
public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}
SendShopToUser.php
<?php
namespace App\Listeners;
use App\Events\OrderShoped;
use App\Mail\Order\orderpost;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Support\Facades\Mail;
class SendShopToUser
{
/**
* Create the event listener.
*
* @return void
*/
public function __construct()
{
}
/**
* Handle the event.
*
* @param OrderShoped $event
* @return void
*/
public function handle(OrderShoped $event)
{
$event->order->express_type = $event->express_type;
$event->order->express_no = $event->express_no;
$event->order->status = 3;
$event->order->save();
// 发货之后 邮件提醒
// 发送邮件
Mail::to('1262195190@qq.com')->queue(new orderpost());
}
}
1. 创建邮箱类
php artisan make:mail Order/orderpost
Mail/Order/orderpost
<?php
namespace App\Mail\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
class orderpost extends Mailable
{
use Queueable, SerializesModels;
protected $order;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($order)
{
$this->order = order
}
/**
* 渲染邮箱视图
*
* @return $this
*/
public function build()
{
return $this->view('emails.order-post',[
'order' => $this->order
]);
}
}
这里是发送邮箱的一个方法
use Illuminate\Support\Facades\Mail;
use App\Mail\Order\orderpost;
public fucntion index()
{
// send('这里是你刚才创建邮箱类的时候的那个文件orderpost')
// 当订单$order传进去的时候, orderpost这个类文件就可以接收到你穿的值了, 然后orderpost类文件触发build方法渲染视图
// Mail::to('购买者的邮箱')->send(new orderpost($order));
// 使用队列
// Mail::to('购买者的邮箱')->queue(new orderpost($order));
// 使用事件
// 使用辅助函数分发,发送邮件
event(new \App\Events\OrderShoped($orders, '$express_type', '$express_no'));
// 使用事件分发
\App\Events\OrderShoped::dispatch($orders, '$express_type', '$express_no')
}