Cakephp 从模板/布局访问CakeEmail主题

Cakephp 从模板/布局访问CakeEmail主题,cakephp,cakephp-2.0,cakephp-2.3,cakephp-2.1,cakeemail,Cakephp,Cakephp 2.0,Cakephp 2.3,Cakephp 2.1,Cakeemail,我使用的方法如下: $Email = new CakeEmail(); $Email->template('my_template', 'my_layout'); $Email->subject('My Subject'); // ... 如何访问My_layout.ctp中的“我的主题”值 我能找到的最接近的东西是,但它不是很相关。我看了看,它似乎没有这样做,但我不确定 我知道我也可以将主题行传递到$Email->viewVars,但这不是很灵活。请告知 除了将主题设置为视图变量

我使用的方法如下:

$Email = new CakeEmail();
$Email->template('my_template', 'my_layout');
$Email->subject('My Subject');
// ...
如何访问
My_layout.ctp
中的“我的主题”值

我能找到的最接近的东西是,但它不是很相关。我看了看,它似乎没有这样做,但我不确定


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

除了将主题设置为视图变量之外,没有其他方法。

除了将主题设置为视图变量之外,没有其他方法。

除了设置视图变量之外,使用
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);
    }

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

$Email = new CustomCakeEmail();
$Email->template('my_template', 'my_layout');
$Email->subject('My Subject');
此处
CakeEmail::\u renderTemplates()
被扩展以在视图变量中设置主题(只要尚未在其他地方设置)。然后使用扩展类,而不是像这样使用
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);
    }

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

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

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

除了设置一个视图变量,使用
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);
    }

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

$Email = new CustomCakeEmail();
$Email->template('my_template', 'my_layout');
$Email->subject('My Subject');
此处
CakeEmail::\u renderTemplates()
被扩展以在视图变量中设置主题(只要尚未在其他地方设置)。然后使用扩展类,而不是像这样使用
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);
    }

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

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

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

向上投票。只需将subject设置为一个变量,并将其与subject和as模板变量一起使用。另一个答案也可以,但您真的希望所有代码加上重载一个类来归档它吗。只需将subject设置为一个变量,并将其与subject和as模板变量一起使用。另一个答案也可以,但你真的希望所有代码加上重载一个类来归档吗?没有尝试过这个,但我接受这个答案,因为它将对尝试归档的人有所帮助。谢谢。我没有试过这个,但是我接受了这个答案,因为它对任何想尝试的人都有帮助。谢谢。当我问这个问题时,我没有想到的一个选项是:围绕
CakeEmail
创建您自己的包装,并提供所有必要的功能。当我问这个问题时,我没有想到的一个选项是:围绕
CakeEmail
创建您自己的包装,并提供所有必要的功能。