使用来自DB的模板邮件

时间:2013-12-29 10:00:50

标签: php laravel laravel-4

Laravel邮件方法默认搜索views / emails文件夹中的模板。我会使用邮件方法与存储在DB中的模板。我应该如何修改邮件,以便从任何来源获取模板?

2 个答案:

答案 0 :(得分:2)

Laravel邮件方法不会在views / emails文件夹中搜索模板,您必须提及要用于邮件的刀片模板名称。

我们假设您在视图文件夹中有一个名为 mymailtemplates 的文件夹,其中有一个名为 welcome.blade.php 的模板,然后您可以使用此模板发送邮件,如下所示

Mail::send('mymailtemplates.welcome', $data, function($message)
{
    $message->from('us@example.com', 'Laravel');

    $message->to('foo@example.com')->cc('bar@example.com');

    $message->attach($pathToFile);
});

现在,如果你想使用存储在DB中的模板,那么在变量中获取这些模板并创建一个虚拟刀片文件(dummy.blade.php),它只会回显给它的内容(在这种情况下是模板)从DB),您现在可以使用存储在DB中的模板发送邮件,如此,

Mail::send('mymailtemplates.welcome', $templatedata, function($message)
{
    $message->from('us@example.com', 'Laravel');

    $message->to('foo@example.com')->cc('bar@example.com');

    $message->attach($pathToFile);
});

其中$ templatedata将包含从DB中分阶段的模板代码。

答案 1 :(得分:1)

好的,为了完整起见:

首先,您需要创建一个名为example.blade.php的模板,该模板在resources / views / email中创建:' email.example'

<!DOCTYPE html>
<html lang="en-EN">
    <head>
        <meta charset="utf-8">
    </head>
    <body bgcolor="#11C9FF">
        {!! $body !!}
    </body>
</html>

当然,你可以在这里使用模板继承,但让它保持简单。

使用下一个创建的模板获取包含此电子邮件内容的记录。我假设你有一个HTML邮件模板存储在一个名为(例如)电子邮件的模型中。 (列:id,subject,body)。

在您的控制器功能中加载模板内容:

// assuming your email template has an id of 1!    
$mailtemplate = Emails::find(1); 

现在变量$ mailtemplate包含:

[
    'id'    => '1'
    'title' => 'The subject of the email',
    'body'  => '<p>The content of the email</p> '
]

然后你可以这样使用它:

Mail::send('email.example', $mailtemplate, function($message) use $mailtemplate
{
    $message->subject($mailtemplate['title']);        
    $message->from('us@example.com', 'Laravel');
    $message->to('foo@example.com');
});

在您的模板中,您将通过元素名称(id,subject,body)获得变量。