从模板/布局访问CakeEmail主题

时间:2016-01-18 17:46:05

标签: cakephp cakephp-2.0 cakephp-2.3 cakephp-2.1 cakeemail

我使用CakeEmail如下:

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

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

我能找到的最接近的是this,但它并不是很相关。我正在查看CakeEmail::_renderTemplates() source code并且它似乎没有这样做,但我不确定。

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

2 个答案:

答案 0 :(得分:3)

除了将主题设置为视图var之外别无其他。

答案 1 :(得分: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变量,其中包含电子邮件的主题。