Как правильно отправлять данные в Mail::queue()?

Я пытаюсь использовать 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(), но безуспешно.


person Antonio Carlos Ribeiro    schedule 12.05.2013    source источник
comment
Привет Антонио. Возможно, опубликуйте некоторые из Попытка получить свойство журналов, не являющихся объектами, и это, вероятно, поможет отладить это.   -  person Eric    schedule 16.05.2013
comment
Только что добавил рабочую версию. Спасибо. :)   -  person Antonio Carlos Ribeiro    schedule 16.05.2013


Ответы (1)


Что ж... К сожалению, я был вынужден внести изменения в свои планы и использовать только 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 (), т. Е. Но, поскольку они мне все еще не нужны, я просто держу их сухими.

person Antonio Carlos Ribeiro    schedule 16.05.2013