【问题标题】:Object is missing when using Laravel Mail::later使用 Laravel Mail::later 时缺少对象
【发布时间】:2014-01-23 04:24:32
【问题描述】:

我有这个代码:

$data = ['user'=>User::find(1)];
Mail::later(5, 'email.template', $data, function($message){
  ...
})

email.template 有这个:

print_r($user)

当我收到电子邮件时,$user 的实例不是 User 对象。怎么会这样?就像对象没有引用正确的上下文一样。但是当我使用 Mail::send 时,它工作正常。这里有点混乱。

【问题讨论】:

    标签: laravel queue


    【解决方案1】:

    Eloquent 模型对于队列的工作来说太大了,通常有 64kb 的限制。

    我建议您使用常规队列作业,将您的用户 ID 传递给它,然后从那里发送电子邮件:

    $user_id = 1;
    
    Queue::later(5, function () use ($user_id) {
        $data = ['user' => User::find($user_id)];
    
        Mail::send('email.template', $data, function ($message) {
            // ......
        });
    });
    

    【讨论】:

    • 不错的解决方案。我一直在寻找一种在我的电子邮件模板中使用视图演示者对象的方法。
    • 感谢您的解决方案!
    • 我使用了没有外观的存储库。我可以使用 App:make 来获取我需要的存储库对象。
    • 嗨@Joseph Silber,如果我使用您的方法,它可以正常工作,但是如果我尝试在刀片中发送类似@component('mail::table') 的表格,那么我会收到错误No hint path defined for [mail] 只有可标记可以帮助我解决我的问题但是我不知道如何使我的观点变得可标记你能帮我吗?这是我的问题stackoverflow.com/questions/68582332/…
    【解决方案2】:

    我对其他两个应答器采用了类似的方法,但我使用视图创建器实现了它。我能够使用 $view->getData() 从视图中检索变量,并从中检索 Eloquent 模型。您可以将以下内容与 Mail::later 或 Mail::queue 结合使用。

    View::creator('email.template', function($view)
    {
        $view_data = $view->getData();
    
        if (isset($view_data['user_id']))
        {
            $user_id = $view_data['user_id'];
            $view->with('user', User::find(user_id));
        }
    });
    

    【讨论】:

      【解决方案3】:

      序列化 Eloquent 模型可能有点棘手。最安全的方法是将 ID 传递给 Mail 队列,并在它返回时检索它:

      $data = ['user_id' => 1];
      Mail::later(5,'email.template', $data, function ($message) {
         ...
      });
      

      在您的模板中(靠近顶部):

      <?php $user = User::find($user_id); ?>
      
      .. rest of template
      

      或者,正如 IRC 上的其他一些人所建议的那样,完全跳过 Mail::later() 并改用 Queue::later()。编写您自己的处理程序,从 id 中检索模型,然后触发 Mail::send()

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-22
        • 2021-04-11
        • 2014-11-27
        • 2015-11-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多