0

我正在尝试 Mail::queue() 这就是我正在做的事情:

这是发送我的电子邮件的类

class Email {

    public static function send($user, $view, $subject) {

        Mail::queue($view, array('user' => $user), function($m) use ($user, $subject) {
            $m->to($user->email)->subject($subject);
        });

        Log::info("Mail [$subject] sent to $user->email");

    }

}

这是叫 marshal() 的人

class QueueController extends BaseController {

    public function push()
    {

        Log::info('[queue.push] Queue::marshal() called');

        return Queue::marshal();
    }

}

这就是我所说的:

Email::send($user, 'site.users.emailRegistered', 'Activate your account');

这是我试图呈现为电子邮件的视图:

<!DOCTYPE html>
<html lang="en-US">
    <head><meta charset="utf-8"></head>
    <body>
        <h2>Hi,</h2>
        <div>
            Please, click the link to activate your account: {{ URL::route('activate', array($user->id,$user->getActivationCode())) }}
        </div>
    </body>
</html>

问题是 Mail::send() 工作正常,但是当我使用 Mail::queue() 并且 marshal() 被触发时,我在日志中收到一堆与“尝试获取非对象的属性”相关的错误行。

显然我的数据没有被正确序列化,因为我将一些实例化模型传递给它,但是我如何正确序列化它呢?

我已经尝试创建一个 $data 数组并将所有内容放在上面,然后只将它传递给 Mail::queue(),但没有运气。

4

1 回答 1

0

好吧......不幸的是,我被迫改变我只使用 Mail::queue() 的计划,但仍然可以正常工作,这里是代码:

class Email {

    public static function queue($user, $view, $subject) {

        $userId = $user->id;

        $data = compact('userId', 'view', 'subject');

        Queue::push(function($job) use ($data) {
            $user = Sentry::getUserProvider()->findById($data['userId']);

            Email::send($user, $data['view'], $data['subject']);
        });

        Log::info("Mail [$subject] QUEUED to $user->email");

    }

    public static function send($user, $view, $subject) {

        Mail::send($view, ['user' => $user], function($m) use ($user, $subject) {
            $m->to($user->email)->subject($subject);
        });

        Log::info("Mail [$subject] SENT to $user->email");

    }

}

当然还有一些改进,使用 Queue:later() ie,但我仍然不需要它们,我只是保持干燥。

于 2013-05-16T02:19:56.593 回答