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() を使用するなどの改善点はありますが、まだ必要ないので、そのままにしておきます。

于 2013-05-16T02:19:56.593 に答える