it-devgroup / laravel-email-template-lite
laravel 邮件模板轻量版
Requires
- php: ^8.0
- illuminate/collections: ^9.0|^10.0
- illuminate/contracts: ^9.0|^10.0
- illuminate/database: ^9.0|^10.0
- illuminate/support: ^9.0|^10.0
README
描述
- 同步数据库中电子邮件模板表的命令
- seeder 文件中的所有电子邮件模板
- 从数据库中保存和加载电子邮件模板(CRUD 系统的 API)
- 自定义变量(常用变量和每种模板类型的单独变量)
- 通过配置文件自定义变量
- 通过词典文件自定义变量的文本
- 所有电子邮件模板的包装模板(blade)
- 预览电子邮件模板
- 自定义电子邮件模板模型和表
Lumen 安装
1. 打开文件 bootstrap/app.php
取消注释字符串
$app->withFacades();
$app->withEloquent();
添加在 $app->configure('app'); 之后
$app->configure('email_template_lite');
添加新的服务提供者
$app->register(\ItDevgroup\LaravelEmailTemplateLite\Providers\EmailTemplateServiceProvider::class);
2. 运行命令
创建配置文件
php artisan email:template:publish --tag=config
创建迁移文件
php artisan email:template:publish --tag=migration
生成表
php artisan migrate
创建资源文件
php artisan email:template:publish --tag=resource
laravel 安装
1. 打开文件 config/app.php 并搜索
'providers' => [
...
]
添加到部分
\ItDevgroup\LaravelEmailTemplateLite\Providers\EmailTemplateServiceProvider::class,
示例
'providers' => [
...
\ItDevgroup\LaravelEmailTemplateLite\Providers\EmailTemplateServiceProvider::class,
]
2. 运行命令
创建配置文件
php artisan vendor:publish --provider="ItDevgroup\LaravelEmailTemplateLite\Providers\EmailTemplateServiceProvider" --tag=config
创建迁移文件
php artisan email:template:publish --tag=migration
生成表
php artisan migrate
创建资源文件
php artisan vendor:publish --provider="ItDevgroup\LaravelEmailTemplateLite\Providers\EmailTemplateServiceProvider" --tag=resources
下一步:为 laravel 和 lumen 安装
1. 如果不存在,则创建电子邮件模板的 seeder 文件。在创建的 seed 文件中,您需要在其中添加一个静态方法(例如,public static function data())。该方法必须返回一个标准数组以填充数据库
2. 打开配置文件 config/email_template_lite.php 并将此类和方法添加到存在的参数中
'data' => [
'class' => \Database\Seeders\EmailTemplateTableSeeder::class,
'method' => 'data',
],
3. 设置 variable_parser 部分,用于外部或内部解析器
同步电子邮件模板的命令
php artisan email:template:sync
自定义模型
步骤 1
为电子邮件模板创建自定义模型
示例
文件: app/CustomFile.php
内容
<?php
namespace App;
class CustomFile extends \ItDevgroup\LaravelEmailTemplateLite\Model\EmailTemplate
{
}
如果需要更改表名或需要添加其他代码
<?php
namespace App;
class CustomFile extends \ItDevgroup\LaravelEmailTemplateLite\Model\EmailTemplate
{
protected $table = 'YOUR_TABLE_NAME';
// other code
}
步骤 2
打开 config/email_template_lite.php 并更改参数 "model",例如
...
// replace
'model' => \ItDevgroup\LaravelEmailTemplateLite\Model\EmailTemplate::class,
// to
'model' => \App\CustomFile::class,
步骤 3
在所有地方使用自定义 \App\CustomFile 模型代替标准模型 \ItDevgroup\LaravelEmailTemplateLite\Model\EmailTemplate
用法
初始化服务
$service = app(\ItDevgroup\LaravelEmailTemplateLite\EmailTemplateServiceInterface::class);
或注入
// use
use ItDevgroup\LaravelEmailTemplateLite\EmailTemplateServiceInterface;
// constructor
public function __construct(
EmailTemplateServiceInterface $emailTemplateService
)
或使用助手
\ItDevgroup\LaravelEmailTemplateLite\Helpers\EmailTemplateHelper::getList();
\ItDevgroup\LaravelEmailTemplateLite\Helpers\EmailTemplateHelper::getById(1);
...
以后我们将使用变量 $service
电子邮件模板列表
所有电子邮件模板
$eloquentCollection = $service->getList();
带过滤器的电子邮件模板。所有过滤器参数不是必需的
$filter = (new \ItDevgroup\LaravelEmailTemplateLite\Model\EmailTemplateFilter())
->setIsPublic(true);
// or
$filter = (new \ItDevgroup\LaravelEmailTemplateLite\Model\EmailTemplateFilter())
->setType('type_name_by_like')
->setTitle('title_by_like')
->setIsActive(true);
$eloquentCollection = $service->getList($filter);
带分页的电子邮件模板
$lengthAwarePaginator = $service->getList(null, $page, $perPage);
$lengthAwarePaginator = $service->getList(null, 1, 10);
带排序的电子邮件模板
$eloquentCollection = $service->getList(null, null, null, $fieldName, $ascOrDesc);
$eloquentCollection = $service->getList(null, null, null, 'title', 'ASC');
按 ID 查找电子邮件模板
$emailTemplate = $service->getById(1);
按 TYPE 查找电子邮件模板
$emailTemplate = $service->getByType('emailTemplate_type');
创建电子邮件模板
$emailTemplate = \ItDevgroup\LaravelEmailTemplateLite\Model\EmailTemplate::register(
'type',
'Title',
'Subject',
'Body'
);
$emailTemplate->is_active = true;
$service->createModel($emailTemplate);
更新电子邮件模板
$emailTemplate = $service->getById(1);
$emailTemplate->title = 'Title';
$emailTemplate->subject = 'Subject';
$emailTemplate->body = 'Body';
$emailTemplate->is_active = true;
$service->updateModel($emailTemplate);
删除电子邮件模板
$emailTemplate = $service->getById(1);
$service->deleteModel($emailTemplate);
解析电子邮件模板的短代码
$emailTemplate = $service->getById(1);
// or
$emailTemplate = $service->getByType('type');
$service->render($emailTemplate, ['test_1' => '111', 'test_2' => 222]);
return $emailTemplate;
预览电子邮件模板
$service->preview($emailTemplate);
//
return $emailTemplate;
电子邮件模板变量
$emailTemplate = $service->getById(1);
// or
$emailTemplate = $service->getByType('type');
$emailTemplate->variables; // Collection
$emailTemplate->variables[0]->key;
$emailTemplate->variables[0]->description;
电子邮件模板包装器
return $service->emailWrapper();
设置新包装器(通过代码更改)的电子邮件模板
$service->setEmailWrapper('email-template.wrapper');
添加新模板的流程
-
添加到 seeder 文件
-
运行同步命令
php artisan email:template:sync
-
将电子邮件模板变量添加到配置文件 config/email_template_lite.php 中的 variables 部分
-
将变量的文本添加到词典文件 resources/lang/LANG_KEY/email_template_variables.php
添加新常用变量的流程
- 打开文件 config/email_template_lite.php 并将变量添加到 variables - common 部分,例如
'variables' => [
'common' => [
'site_name' => \App\CustomEmailTemplateVariableSiteName::class,
],
...
-
创建类 \App\CustomEmailTemplateVariableSiteName
-
该类必须是 ItDevgroup\LaravelEmailTemplateLite\EmailTemplateVariableInterface 接口的实现
-
该类必须包含一个公共方法 toString(): ?string
完整示例文件
<?php
namespace App;
use ItDevgroup\LaravelEmailTemplateLite\EmailTemplateVariableInterface;
class CustomEmailTemplateVariableSiteName implements EmailTemplateVariableInterface
{
public function toString(): ?string
{
return 'site name';
}
}
测试
测试需要 phpunit
vendor/bin/phpunit vendor/it-devgroup/laravel-email-template-lite