无法将变量传递给 Mail::queue() 消息
Cannot pass variables to Mail::queue() message
使用 Laravel 4.2,我正在尝试使用此代码对邮件消息进行排队:
public function sendEmailNotices($type, $user, array $data = [])
{
$type = strtoupper($type);
$emails = [];
if (Config::get("emailer.$type.email_others"))
$emails = Config::get("emailer.$type.email_others");
if (Config::get("emailer.$type.email_user"))
$emails += [$user->email];
if (!empty($emails)) {
foreach ($emails as $email) {
Mail::queue('emails.' . strtolower($type), array_merge((array)$data, ['user' => $user, 'is_user' => $email == $user->email]), function ($message) use ($email, $user, $type) {
$message->to($email, $user->first_name . ' ' . $user->last_name)->subject(Config::get("emailer.$type.subject"));
});
}
}
}
在我测试的模板中有:
<div>
Welcome {{ $user->first_name }} {{ $user->last_name }} [{{ $user->email }}].
</div>
这总是会产生错误:
Trying to get property of non-object
我认为 User 对象无法在队列中存活,因此我尝试将其更改为将 'first_name' 作为变量传递。当我这样做时,我得到了错误:
Undefined variable: first_name
为什么排队时没有任何内容进入模板?当我改为 Mail::send()
时效果很好。
Mail::Send
按原样传递 PHP
个变量。
Mail::Queue
使用队列,将所有 php
变量转换为 array 符号。
进入兔子洞,我们去:
路径:vendor\laravel\framework\src\Illuminate\Mail\Mailer.php 行 163
public function queue($view, array $data, $callback, $queue = null)
{
$callback = $this->buildQueueCallable($callback);
return $this->queue->push('mailer@handleQueuedMessage', compact('view', 'data', 'callback'), $queue);
}
使用 Laravel 4.2,我正在尝试使用此代码对邮件消息进行排队:
public function sendEmailNotices($type, $user, array $data = [])
{
$type = strtoupper($type);
$emails = [];
if (Config::get("emailer.$type.email_others"))
$emails = Config::get("emailer.$type.email_others");
if (Config::get("emailer.$type.email_user"))
$emails += [$user->email];
if (!empty($emails)) {
foreach ($emails as $email) {
Mail::queue('emails.' . strtolower($type), array_merge((array)$data, ['user' => $user, 'is_user' => $email == $user->email]), function ($message) use ($email, $user, $type) {
$message->to($email, $user->first_name . ' ' . $user->last_name)->subject(Config::get("emailer.$type.subject"));
});
}
}
}
在我测试的模板中有:
<div>
Welcome {{ $user->first_name }} {{ $user->last_name }} [{{ $user->email }}].
</div>
这总是会产生错误:
Trying to get property of non-object
我认为 User 对象无法在队列中存活,因此我尝试将其更改为将 'first_name' 作为变量传递。当我这样做时,我得到了错误:
Undefined variable: first_name
为什么排队时没有任何内容进入模板?当我改为 Mail::send()
时效果很好。
Mail::Send
按原样传递 PHP
个变量。
Mail::Queue
使用队列,将所有 php
变量转换为 array 符号。
进入兔子洞,我们去:
路径:vendor\laravel\framework\src\Illuminate\Mail\Mailer.php 行 163
public function queue($view, array $data, $callback, $queue = null)
{
$callback = $this->buildQueueCallable($callback);
return $this->queue->push('mailer@handleQueuedMessage', compact('view', 'data', 'callback'), $queue);
}