如何渲染laravel mailable变量

时间:2018-01-04 13:54:51

标签: laravel

我需要获取Mailable类的html

$mail->html = (new InactivityReminder())->"do something to output the html"

似乎没有toHtml方法或类似的东西。

可邮寄:

class InactivityReminder extends Mailable
{
    use Queueable, SerializesModels;

    public function __construct()
    {

    }

    public function build()
    {
        return $this->markdown('mail.it.inactivityReminder');
    }
}

3 个答案:

答案 0 :(得分:1)

在5.5中,render()方法将呈现您在Mailable中返回的视图:

$html = (new InactivityReminder)->render()

答案 1 :(得分:0)

接口不提供该功能。这意味着在将来更新Laravel时,依赖它会导致问题。如果这不是您的问题,您可以使用返回View对象的render()方法,然后在其上调用render()

所以:

(new InactivityReminder)->render()->render()

或者:

(string) (new InactivityReminder)->render()

在View上__toString()将调用它的渲染方法。

答案 2 :(得分:0)

对于Laravel中完全可自定义的邮件,我最好使用Mailables而不是Notifiables。这是对我有用的东西:

可邮寄类:

use Illuminate\Mail\Mailable;

class MyMail extends Mailable
{
    public function __construct($someData) {
        $this->someData = $someData;
    }

    public function build() {
        return $this->markdown('mail/my-mail-view')
            ->with([
                "someData" => $this->someData
            ]);
    }
}

邮件视图(资源/视图/邮件/my-mail-view.blade.php):

@extends('mail/mail-layout')

@section('content')
    <p>Hi {{ $someData->first_name }}</p>
@endsection

邮件布局(资源/视图/邮件/mail-layout.blade.php):

<div class="myMailBody">
@yield('content')
</div>

邮件CSS文件(资源/视图/供应商/邮件/ html /主题/default.css): (假设您已经运行过“ php artisan vendor:publish --tag = laravel-mail”)

.myMailBody {
  // css styles here
}

控制器中的代码

$previewMailHtml = (string) (new \Illuminate\Mail\Markdown(view(), config('mail.markdown')))->render('mail/my-mail-view', [
    "someData" => $someData
]);