Email Blade 获得未定义的变量:使用 Laravel 队列时
Email Blade Got Undefined variable: when using Laravel queue
每当有人在我的网站上下新订单时,我都会尝试将成功的电子邮件排队。我使用事件和侦听器来完成此操作。下面是我在监听器文件上发送电子邮件的代码:
NewOrderListener.php
public function handle($event)
{
try {
dump('new order registered (listernerrr)');
$email = $event->order['email'];
Mail::send('email.order_mail_customer', $event->order, function($message) use($email)
{
dump($email);
$sub_data = (Lang::has(Session::get('front_lang_file').'.FRONT_ORDER_SUCCSESS')) ? trans(Session::get('front_lang_file').'.FRONT_ORDER_SUCCSESS') : trans($this->FRONT_LANGUAGE.'.FRONT_ORDER_SUCCSESS');
dump($sub_data);
$message->to('googleadmin@gmail.com')->subject($sub_data);
dump('email sent');
});
} catch (\Exception $e) {
dump($e->getMessage());
}
}
email.order_mail_customer.blade.php 文件:
<html>
<body style="margin: 0; padding: 0;">
@if(count($order_details) > 0)
<table cellpadding="0" cellspacing="0" width="600" align="center" style="border:1px solid #ddd;">
<tr>
<td style="border-top: 5px solid #f7d501;">
<table style="padding:10px;width:100%;">
<tr>
<td align="center">
@php $path = url('').'/public/images/noimage/default_image_logo.jpg'; @endphp
@if(count($logo_settings_details) > 0)
@php
foreach($logo_settings_details as $logo_set_val){ }
@endphp
@if($logo_set_val->admin_logo != '')
@php $filename = public_path('images/logo/').$logo_set_val->admin_logo; @endphp
@if(file_exists($filename))
@php $path = url('').'/public/images/logo/'.$logo_set_val->admin_logo; @endphp
@endif
@endif
@endif
<img src="{{$path}}" alt="@lang(Session::get('front_lang_file').'.ADMIN_LOGO')" class="img-responsive logo" width="100">
</td>
</tr>
</table>
</td>
</tr>
异常信息:
未定义的变量:logo_settings_details in email.order_mail_customer.blade.php
以上代码运行当我设置队列驱动程序=sync并且没有队列时OK。
但是当我通过设置 driver=database 并将 ShouldQueue 实现到 NewOrderListener 文件来使用队列时,我在 order_mail_customer.blade.php 上得到了未定义的 property/variable。希望有人能帮我解决这个问题。提前致谢。
没关系,我发现了问题,这个变量不能被调用,因为这个变量是静态变量,它在队列得到 运行 之前就被销毁了。
每当有人在我的网站上下新订单时,我都会尝试将成功的电子邮件排队。我使用事件和侦听器来完成此操作。下面是我在监听器文件上发送电子邮件的代码:
NewOrderListener.php
public function handle($event)
{
try {
dump('new order registered (listernerrr)');
$email = $event->order['email'];
Mail::send('email.order_mail_customer', $event->order, function($message) use($email)
{
dump($email);
$sub_data = (Lang::has(Session::get('front_lang_file').'.FRONT_ORDER_SUCCSESS')) ? trans(Session::get('front_lang_file').'.FRONT_ORDER_SUCCSESS') : trans($this->FRONT_LANGUAGE.'.FRONT_ORDER_SUCCSESS');
dump($sub_data);
$message->to('googleadmin@gmail.com')->subject($sub_data);
dump('email sent');
});
} catch (\Exception $e) {
dump($e->getMessage());
}
}
email.order_mail_customer.blade.php 文件:
<html>
<body style="margin: 0; padding: 0;">
@if(count($order_details) > 0)
<table cellpadding="0" cellspacing="0" width="600" align="center" style="border:1px solid #ddd;">
<tr>
<td style="border-top: 5px solid #f7d501;">
<table style="padding:10px;width:100%;">
<tr>
<td align="center">
@php $path = url('').'/public/images/noimage/default_image_logo.jpg'; @endphp
@if(count($logo_settings_details) > 0)
@php
foreach($logo_settings_details as $logo_set_val){ }
@endphp
@if($logo_set_val->admin_logo != '')
@php $filename = public_path('images/logo/').$logo_set_val->admin_logo; @endphp
@if(file_exists($filename))
@php $path = url('').'/public/images/logo/'.$logo_set_val->admin_logo; @endphp
@endif
@endif
@endif
<img src="{{$path}}" alt="@lang(Session::get('front_lang_file').'.ADMIN_LOGO')" class="img-responsive logo" width="100">
</td>
</tr>
</table>
</td>
</tr>
异常信息: 未定义的变量:logo_settings_details in email.order_mail_customer.blade.php
以上代码运行当我设置队列驱动程序=sync并且没有队列时OK。
但是当我通过设置 driver=database 并将 ShouldQueue 实现到 NewOrderListener 文件来使用队列时,我在 order_mail_customer.blade.php 上得到了未定义的 property/variable。希望有人能帮我解决这个问题。提前致谢。
没关系,我发现了问题,这个变量不能被调用,因为这个变量是静态变量,它在队列得到 运行 之前就被销毁了。