从 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
变量。
我使用 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
变量。