从 template/layout 访问 CakeEmail 主题

Accessing the CakeEmail subject from a template/layout

我使用 CakeEmail 如下:

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

如何访问 my_layout.ctp 中的 'My Subject' 值?

我能找到的最接近的东西是 this but it's not very relevant. I'm looking at the CakeEmail::_renderTemplates() source code,它似乎没有那样做,但我不确定。

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

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

除了设置 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() 被扩展为在视图变量中设置主题(只要尚未在其他地方设置)。然后,您将使用扩展的 class 而不是 CakeEmail,如下所示:-

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

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

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