我们使用laravel通知和可邮寄类发送电子邮件通知。
我们有以下流程:我们正在使用laravel 7
1.我们派遣工作dispatch(new JobEntitiesEmail($arr,$email));
- JobEntitiesEmail是我们专门编写的用于发送NOTIFICATIONS的作业
`]
class JobEntitiesEmail implements ShouldQueue
{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
public $tries = 3;
public $arr;
public $email;
public function __construct($arr,$email)
{
$this->arr = $arr;
$this->email = $email;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Notification::route('mail',$this->email)->notify((new EntitiesEmail($this->arr))->locale($this->arr['user_lang']));
}
}
1.我们有app\Notifications\Entities电子邮件。在php中创建一个MailMessage对象。$mailmessage= (new MailMessage)->subject("subject of mail")
->line( __('messages.hello'))
->line(new HtmlString(__('messages.email_message')))
->action(__('titles.click'), url("google.com"));
1.我们在Resources\View\Vendors\mail中有一个电子邮件模板
- Email和Markdown我们希望将logo传递给邮件的头文件,该头文件位于resources\views\vendor\mail\html\header。blade.php
就像这样:
$mailmessage= (new MailMessage)
->subject("email_template")
->line( __('messages.hello')..',')
->line(new HtmlString(__('messages.email_message')))
->action(__('titles.link'), url($link));
}
还希望访问文件resources\views\vendor\mail\html\message中传递的变量$logoUrl。blade.php
喜欢
@component('mail::layout')
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url'), 'logoUrl' => $logoUrl ]) {{ config('app.name') }}
@endcomponent
@endslot
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} <a href="https://google.com">{{ config('app.name') }}</a>. @lang(__('messages.copyright'))
@endcomponent
@endslot
@endcomponent `
我们试过了
1.使用with方法$mailmessage= (new MailMessage)
->subject('New order')
->with(['logoUrl' => $logoUrl ])
它给予数据作为一个outrolines。
1.使用Markdown$mailmessage= (new MailMessage)
->subject('New order')
->markdown('Notification::email', ['logoUrl' => $logoUrl ]);
我们在viewData中获取此数据,但无法在模板文件中访问此数据。
1条答案
按热度按时间b5lpy0ml1#
好吧,我希望这不是太晚,但我两周前就遇到了这个问题,很难找到解决方法。最后,进行了一些调试,并使用了大量的
dd()
方法。我可以这样解决1.将$notifiable变量直接传递给
with()
方法1.然后,在使用
1.然后转到
resources/views/vendor/mail/html/message.blade.php
Illuminate\Support\HtmlString
,它将包含以下信息:注意:
Illuminate\Support\HtmlString
对象末尾的信息是我们包含的$notifiable内容,此变量是User的示例。1.最后,你只需要使用正则表达式和PHP内置的
html_entity_decode
和json_decode
来获取数据,就像这样:注意:如果你仔细观察,我在视图中使用了两个PHP代码块
1.在第一个例子中,我只是删除了来自
$notifiable
变量的所有数据,因为这是一个Illuminate\Support\HtmlString
,它将显示在电子邮件结构中,这是我们不想要的。1.在第二个例子中,我只是通过删除html实体来提取数据,并将其解码为JSON格式,这样我就可以轻松访问它。
希望有帮助,谢谢阅读!
如果有更好的方法,请让我知道,我会很高兴地阅读它