Как использовать помощник частичного представления Zend Framework вне контроллера или представления?

Я хотел бы создать собственный класс, который будет генерировать электронное письмо в формате HTML. Я хочу, чтобы содержимое письма исходило из каталога «скрипты просмотра электронной почты». Таким образом, концепция будет заключаться в том, что я могу создать сценарий просмотра электронной почты в формате HTML так же, как я бы создал обычный сценарий просмотра (имея возможность указывать переменные класса и т. д.), и сценарий просмотра будет отображаться как HTML-текст сообщения электронной почты.

Например, в контроллере:

$email = My_Email::specialWelcomeMessage($toEmail, $firstName, $lastName);
$email->send();

Функция My_Email::specialWelcomeMessage() будет делать что-то вроде этого:

public static function specialWelcomeMessage($toEmail, $firstName, $lastName) {
    $mail = new Zend_Mail();
    $mail->setTo($toEmail);
    $mail->setFrom($this->defaultFrom);
    $mail->setTextBody($this->view->renderPartial('special-welcome-message.text.phtml', array('firstName'=>$firstName, 'lastName'=>$lastName));
}

В идеале было бы лучше, если бы я мог найти способ сделать так, чтобы функция specialWelcomeMessage() работала так же просто:

public static function specialWelcomeMessage($toEmail, $firstName, $lastName) {
    $this->firstName = $firstName;
    $this->lastName = $lastName;
    //the text body and HTML body would be rendered automatically by being named $functionName.text.phtml and $functionName.html.phtml just like how controller actions/views happen
}

Затем будут отображаться сценарии special-welcome-message.text.phtml и special-welcome-message.html.phtml:

<p>Thank you <?php echo $this->firstName; ?> <?php echo $this->lastName; ?>.</p>

Как мне вызвать помощника частичного представления из-за пределов сценария представления или контроллера? Правильно ли я подхожу к этому? Или есть лучшее решение этой проблемы?


person Andrew    schedule 16.07.2010    source источник


Ответы (1)


Как насчет:

public static function specialWelcomeMessage($toEmail, $firstName, $lastName) {
    $view = new Zend_View;
    $view->setScriptPath('pathtoyourview');
    $view->firstName = $firstName;
    $view->lastName = $lastName;
    $content = $view->render('nameofyourview.phtml');
    $mail = new Zend_Mail();
    $mail->setTo($toEmail);
    $mail->setFrom($this->defaultFrom);
    $mail->setTextBody($content);
}

Если вы хотите динамически изменить путь сценария с вашими именами действий, как вы сказали, почему бы не использовать получить имя действия или контроллер, который вы вызываете, и отправить его как переменную или, что еще лучше, параметр по умолчанию. Это поможет:

http://framework.zend.com/manual/en/zend.controller.request.html

person Ashley    schedule 17.07.2010