Добрый день.
Необходимо создать письмо из строки, которая хранится в базе данных.
Строка имеет такой вид:
<p><strong>Поступила новая заявка с site.ru.</strong><br />
<br />
<strong>Имя:</strong> {order->name}<br />
<strong>Телефон:</strong> {order->phone}<br />
<strong>Почта:</strong> {order->email}<br />
<strong>Вес:</strong> {order->weight}<br />
<strong>Откуда:</strong> {order->from}<br />
<strong>Куда:</strong> {order->to}<br />
<strong>Дата отправки:</strong> {order->shipping_date}<br />
<strong>Сообщение:</strong> {order->message}</p>
Все вхождения начинающиеся с order->*, необходимо заменить на значения из POST запроса.
Например.
Есть действие в контролере в котором сохраняются данные переданные через форму.
if(Yii::$app->request->isAjax) {
$model = new Proposal();
if($model->load(Yii::$app->request->post()) && $model->validate()){
if($model->save()){
/* получаем шаблон письма из базы данных */
$template = EmailTemplate::findOne(['name' => 'new_order']);
/* в $model записаны данные, которые надо подставить в $template */
Yii::$app->mailer->compose()
->setFrom([Yii::$app->params['supportEmail'] => Yii::$app->name])
->setTo(Yii::$app->siteSettings->get('SITE.EMAIL_ADMIN'))
->setSubject('Новая заявка на сайте' . Yii::$app->name)
/* подставляю полученную строку в письмо */
->setHtmlBody($template->body)
->send();
return 'ok';
}
}
}
return false;
}
Как в данном случае заменить подстроки в $template->body на значения из $model?
p.s. Пока что видится такое решение.
При записи шаблона в БД создавать файл, в который писать сам шаблон и использовать его уже как вид
Yii::$app->mailer->compose('@app/mails')
При редактировании шаблона перезаписывать файл вида.
Но тут небольшая сложность. Часть данных в $model может отсутствовать. Наверное надо делать дополнительную проверку, есть ли данная подстрока в строке.
Для первой версии yii есть расширение QsEmailManager, а есть ли что-то похожее для второй версии?