
目前我是用这种写法,send 之前先创建一条记录,然后把记录自增 ID 传入到 这个 activeUser 里:
$logId = Helpers::addEmailLog($request->username, '注册激活', '请求地址:' . $activeUserUrl); Mail::to($request->username)->snd(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 去发邮件; 这样看创建用户的逻辑不应该写在任务里,应该保留在控制器里; |