Можно ли записать результат метода render для представления в переменную (php, Yii framework)?

Мне нужно слать письма-уведомления пользователям (письма не text/plain, а text/html). Хотелось бы иметь для каждого шаблонного письма, свое представление (view) и делать что-то вроде:
$body = $this->renderToString('hello_mail_view');
mail($email, $subject, $body, $headers);

Есть ли такая возможность?

Так же дополнительный вопрос. Для отправки писем я создал класс в папке components и в контроллерах, где происходит некое событие, используя этот компонент, шлю письмо пользователю. Насколько данное решение оптимальное с точки зрения концепции MVC? Возможно есть другие решения, подскажите.
  • Вопрос задан
  • 4846 просмотров
Решения вопроса 1
@AlexGx
Yii2 developer, business analytics
Мне нужно слать письма-уведомления пользователям (письма не text/plain, а text/html). Хотелось бы иметь для каждого шаблонного письма, свое представление (view) и делать что-то вроде:

Есть ли такая возможность?

Да. Для этого можно использовать метод renderPartial c указанием параметра return(true). Код будет выглядеть вот так:

$body = Yii::app()->controller->renderPartial('hello_mail_view', array('param'=>'value'), true);
mail($email, $subject, $body, $headers);


Рекомендую ознакомиться с официальной документацией по теме:
CController#renderPartial-detail

Так же дополнительный вопрос. Для отправки писем я создал класс в папке components и в контроллерах, где происходит некое событие, используя этот компонент, шлю письмо пользователю. Насколько данное решение оптимальное с точки зрения концепции MVC? Возможно есть другие решения, подскажите.

Вполне нормальное решение. Можете оформить в виде экстеншена.

Я бы рекомендовал воспользоваться уже существующими расширениями для отправки почты, чем придумывать свой "велосипедик".
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
@Nc_Soft
Позволяет создавать представления для писем
yii-mail
Ответ написан
Mike77
@Mike77
lamp sf2 yii разработчик
можешь попробовать ob_get_contents
Ответ написан
Комментировать
miraage
@miraage
Старый прогер
www.yiiframework.com/doc/api/1.1/CController#rende...
Посмотрите, что делает третий параметр...

Хотя, Вам подойдет renderPartial.
www.yiiframework.com/doc/api/1.1/CController#rende...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы