erwane/cakephp-libs

此包最新版本(2.0.6)没有提供许可证信息。

Erwane CakePHP 库

安装: 958

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 0

开放问题: 0

类型:cakephp-plugin

2.0.6 2022-06-10 13:36 UTC

This package is auto-updated.

Last update: 2024-09-10 18:44:08 UTC


README

邮件发送器

邮件发送器类旨在简化电子邮件模板的自定义。

想象一下,你想要允许你的App用户或管理员自定义他们的电子邮件。使用这些类,你可以在模板中设置一些允许的变量,用户可以使用 {{USER_NAME}} 语法在电子邮件中使用它。

所有变量都需要通过 setAllowedVars() 允许,并且是引用的。没有注入风险。

邮件发送器

use Ecl\Mailer\Mailer;
use Cake\ORM\Entity;

$mailer = new Mailer();
$mailer
    ->setAllowedVars(['USER_NAME'])
    ->setViewVars([
        'user' => new Entity(['name' => 'User Name']),
    ])
    ->setEmailFormat('text')
    ->deliver('Hello {{USER_NAME}}');

这将发送以下内容的文本电子邮件

Hello User Name

这,还可以与可重复使用的邮件发送器和模板一起使用。

namespace App\Mailer;

use Ecl\Mailer\Mailer;

class UserMailer extends Mailer
{
    public function welcome($user)
    {
        $this
            ->setTo($user->email)
            ->setSubject(sprintf('Welcome %s', $user->name))
            ->setAllowedVars(['USER_NAME'])
            ->set(['user' => $user]);
    }
}

// templates/email/html/welcome.php
<p>Hi {{USER_NAME}}</p>

邮件发送器添加了一个新方法 setAllowedVars(array): self,用于模板变量替换,是必需的。

渲染器

如果你想要预先填充一个 wysiwyg 文本区域,可以使用渲染器而不需要 Ecl\Mailer\Mailer

use Ecl\Mailer\Renderer;

$invoice = $this->Invoices->get(1, ['contain' => ['Customers']]);

// Get template from DB (or templates dir)
/** @var \App\Model\Entity\EmailTemplate $emailTemplate */
$emailTemplate = $this->EmailTemplates
    ->find()
    ->where(['type' => 'invoice_send'])
    ->first();

$body = '';
if ($emailTemplate && $emailTemplate->body) {
    $renderer = new Renderer();
    $rendered = $renderer
        ->setAllowedVars([
            'INVOICE_NUM',
            'CUSTOMER_TITLE', 
        ])
        ->set([
            'invoice' => $invoice, 
            'customer' => $invoice->customer,
        ])
        ->render($emailTemplate->body, ['html']);

    $body = $rendered['html'];
}

$body 现在包含格式化的电子邮件主体,所有允许的变量都由实体中的值替换。

<!-- Template -->
<p>Hi {{CUSTOMER_TITLE}}.</p>

<p>
    Please find your invoice <b>{{INVOICE_NUM}}<b> attached.
</p>

<!-- Body for wysiwyg -->
<p>Hi Company name.</p>

<p>
    Please find your invoice <b>FC-202102-01234<b> attached.
</p>