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

时间:2016-01-10 00:33:25

标签: cakephp-3.1 cakephp-3.x

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

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();

但它仍然失败。

有没有办法更改电子邮件模板的路径?

1 个答案:

答案 0 :(得分:0)

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

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

因此,更好的方法(以及更多"蛋糕3"一个)将使用themes。这样您就可以分离模板,帮助器和单元格;适用于您的管理员,公共页面等。

代码将是这样的:

$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
│   └── ...
└── ...