【问题标题】:Accessing the CakeEmail subject from a template/layout从模板/布局访问 CakeEmail 主题
【发布时间】:2016-04-23 23:44:55
【问题描述】:

我使用CakeEmail如下:

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

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

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

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

【问题讨论】:

  • 当我问这个问题时我没有想到的一个选项:使用所有必要的功能围绕 CakeEmail 创建自己的包装器。

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


【解决方案1】:

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

【讨论】:

  • 赞成。只需将主题设为变量并将其与主题一起使用并用作模板变量。另一个答案也适用,但是您是否真的想要所有代码加上重载一个类只是为了存档 那个
【解决方案2】:

除了设置 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 变量。

【讨论】:

  • 没试过这个,但我接受这个答案,因为它对任何尝试的人都有帮助。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-19
  • 2019-09-28
  • 1970-01-01
  • 2012-10-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多