0

我正在使用CakeEmail如下:

$Email = new CakeEmail();
$Email->template('my_template', 'my_layout');
$Email->subject('My Subject');
// ...

如何访问“我的主题”中的值my_layout.ctp

我能找到的最接近的是这个,但它不是很相关。我正在查看CakeEmail::_renderTemplates()源代码,它似乎没有这样做,但我不确定。

我知道我也可以将主题行传递给,$Email->viewVars但这不是很灵活。请指教!

4

2 回答 2

3

除了设置 View 变量之外,没有办法使用CakeEmail. 但是,您可以进行扩展CakeEmail,以便将电子邮件的主题添加到模板中的可用变量中。

我还没有测试过这个,但你应该能够做这样的事情: -

// app/Lib/CustomCakeEmail.php

App::uses('CakeEmail', 'Network/Email');

class CustomCakeEmail extends CakeEmail {

    protected function _renderTemplates($content) {
        if (!empty($this->_subject) && empty($this->_viewVars['subject'])) {
            $this->_viewVars['subject'] = $this->_subject;
        }
        return parent::_renderTemplates($content);
    }

}

这里CakeEmail::_renderTemplates()扩展为在视图变量中设置主题(只要它尚未在其他地方设置)。然后,您将使用扩展类而不是CakeEmail这样:-

App::uses('CustomEmail', 'Lib');

$Email = new CustomCakeEmail();
$Email->template('my_template', 'my_layout');
$Email->subject('My Subject');

您的视图模板将有一个$subject包含电子邮件主题的变量。

于 2016-01-18T18:24:48.867 回答
3

除了将主题设置为视图变量之外,别无他法。

于 2016-01-18T17:52:47.813 回答