如何在 cakephp 3.1 中使用带前缀的电子邮件模板?

How to use prefixed email templates in cakephp 3.1?

我使用的是 cakephp 3.1.6,我有一个 admin 前缀来分隔我的管理部分。使用这种方法,我为模板生成了这个文件夹结构:

src/Template
├── Admin
│   ├── Element
│   │   └── ...
│   ├── Email
│   │   └── ...
│   ├── Layout
│   │   └── ...
│   └── ...
├── Element
│   └── ...
├── Email
│   └── ...
├── Layout
│   └── ...
└── ...

它适用于普通模板,但不适用于电子邮件模板。 Cakephp 正在尝试在默认位置找到电子邮件模板,即 src/Template/Email

我试过使用 viewBuilder 设置路径,如下所示:

$email = new Email('default');
$email->viewBuilder()->layoutPath(APP . "Template" . DS . "Admin")
      ->templatePath(APP . "Template" . DS . "Admin")
      ->build();

$email->template('forgot_password', 'default')
      ->to($user->email, $user->nick_name)
      ->subject('Reset password')
      ->send();

但是还是失败了

有什么方法可以更改电子邮件模板的路径吗?

我会回答我自己的问题,因为没有其他人这样做过。

问题中发布的代码实际上确实有效,但它有一个问题:它设置了一个路径,因此它只能与文本或电子邮件模板一起使用,不能同时与两者一起使用。

因此,更好的方法(以及更多 "cake 3" 方法)是使用 themes。这样你就可以分离模板、助手和单元格;对于您的管理员,public 页等

代码应该是这样的:

$email = new Email('default');
$email->template("my_template", "my_layout")
      ->theme("AdminDefaultTheme")
      ->emailFormat('both')
      ->to("someuser@localhost.dev", "Some User")
      ->subject('Testing emails')
      ->send();

文件夹结构如下所示:

├── plugins     // Your admin templates
│   └── AdminDefaultTheme
│       └── Template
│           ├── Email
│           │  ├── html
│           │  │   └── my_template.ctp
│           │  └── text
│           │      └── my_template.ctp
│           └── Layout
│               └── Email
│                   ├── html
|                   |   └── my_layout.ctp
│                   └── text
|                       └── my_layout.ctp
├── src         // Your app code
│   ├── Controller
│   └── ...
└── ...