目前我是用这种写法,send 之前先创建一条记录,然后把记录自增 ID 传入到 这个 activeUser 里:
$logId = Helpers::addEmailLog($request->username, '注册激活', '请求地址:' . $activeUserUrl);
Mail::to($request->username)->send(new activeUser($logId, $activeUserUrl));
抽象于 ShouldQueue,所以其实是走队列发送的邮件,我是想把
$logId = Helpers::addEmailLog($request->username, '注册激活', '请求地址:' . $activeUserUrl);
这行代码给加入到下面这个 build 里,但是貌似行不通,不晓得有什么办法实现?反正就是想把上面个两行控制器代码简化成一行
<?php
namespace App\Mail;
use App\Http\Models\EmailLog;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class activeUser extends Mailable implements ShouldQueue
{
use Queueable, SerializesModels;
protected $id; // 邮件记录 ID
protected $activeUserUrl; // 激活用户 URL
public function __construct($id, $activeUserUrl)
{
$this->id = $id;
$this->activeUserUrl = $activeUserUrl;
}
public function build()
{
return $this->view('emails.activeUser')->subject('激活账号')->with([
'activeUserUrl' => $this->activeUserUrl
]);
}
// 发件失败处理
public function failed(\Exception $e)
{
EmailLog::query()->where('id', $this->id)->update(['status' => -1, 'error' => $e->getMessage()]);
}
}
1
sandersyao 2019-04-22 22:01:39 +08:00
我不太理解业务逻辑,但觉得应该这样处理:
1.让控制器去创建用户; 2. dispatch 一个 job 去发邮件; 这样看创建用户的逻辑不应该写在任务里,应该保留在控制器里; |