V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
solaro
V2EX  ›  PHP

laravel 发邮件前如何先往数据库里写入发信记录,发信后改这个记录的状态

  •  
  •   solaro · 2019-04-22 14:59:39 +08:00 · 2898 次点击
    这是一个创建于 1829 天前的主题,其中的信息可能已经有所发展或是发生改变。

    LARAVEL 5.6

    控制器代码

    目前我是用这种写法,send 之前先创建一条记录,然后把记录自增 ID 传入到 这个 activeUser 里:

    $logId = Helpers::addEmailLog($request->username, '注册激活', '请求地址:' . $activeUserUrl);
    Mail::to($request->username)->send(new activeUser($logId, $activeUserUrl));
    

    activeUser 代码

    抽象于 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 条回复    2019-04-22 22:01:39 +08:00
    sandersyao
        1
    sandersyao  
       2019-04-22 22:01:39 +08:00
    我不太理解业务逻辑,但觉得应该这样处理:

    1.让控制器去创建用户;
    2. dispatch 一个 job 去发邮件;

    这样看创建用户的逻辑不应该写在任务里,应该保留在控制器里;
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5639 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:40 · PVG 09:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.