2016-01-18 6 views
0

Я использую 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, но это не очень гибко. Пожалуйста, порекомендуйте!

+0

Вариант, о котором я не думал, когда задал вопрос: создайте свою собственную оболочку вокруг 'CakeEmail' со всеми необходимыми функциями. –

ответ

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 переменную, содержащую объект сообщения электронной почты в.

+0

Не пробовал это, но я принимаю ответ, потому что он будет полезен тем, кто пытается. Спасибо. –

3

Нет другого способа, кроме того, чтобы задать объект для вида var тоже.

+2

Приобретено. Просто сделайте объект переменной и используйте его с объектом и в качестве шаблона var. Другой ответ работает также, но вы серьезно хотите, чтобы весь этот код плюс перегрузка класса просто для архивирования *, который *? – burzum

Смежные вопросы