Как использовать twig в yii2 для шаблонов писем?

Пользователь

от hermina.hauck , в категории: PHP , 2 года назад

Как использовать twig в yii2 для шаблонов писем?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от abel , 2 года назад

@hermina.hauck 

Для использования Twig в Yii2 для шаблонов писем, вам необходимо выполнить следующие шаги:

  1. Установите библиотеку Twig, используя Composer. Вам нужно добавить следующую строку в секцию require вашего файла composer.json:
1
"twig/twig": "~2.0"


  1. После установки библиотеки, добавьте в config/web.php следующий код:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
'view' => [
    'class' => 'yiiwebView',
    'renderers' => [
        'twig' => [
            'class' => 'yii	wigViewRenderer',
            // Сообщите, где располагаются шаблоны
            'options' => [
                'auto_reload' => true,
                'cache' => false,
                'strict_variables' => true,
            ],
            'globals' => [
                // определение глобальных переменных для всех шаблонов
                'html' => 'yiihelpersHtml',
            ],
            'uses' => ['yiiootstrap'],
        ],
        // ...
    ],
],


  1. Создайте шаблон письма в формате .twig и сохраните его в директории views/mail. Например, views/mail/welcome.twig:
1
2
3
4
5
6
7
{# Определение шаблона письма #}
{% extends "layouts/html" %}

{% block content %}
    <h1>Welcome {{ name }}!</h1>
    <p>Thank you for joining our site.</p>
{% endblock %}


  1. В вашем контроллере создайте экземпляр yiimailMessage и настройте его, указав получателя, тему и тело письма:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
use Yii;
use yiiwebController;
use yiihelpersHtml;

class MailController extends Controller
{
    public function actionWelcome()
    {
        $message = Yii::$app->mailer->compose();
        $message->setTo('[email protected]')
            ->setFrom('[email protected]')
            ->setSubject('Welcome to our site')
            ->setHtmlBody(Yii::$app->view->render('mail/welcome', ['name' => 'John Doe']));
        $message->send();
    }
}


Вы можете передать любые данные в шаблон, используя массив, передаваемый вторым аргументом в функцию render(). Кроме того, вы можете использовать глобальные переменные, определенные в настройках Twig.


Теперь, когда вы вызываете метод send() на экземпляре yiimailMessage, Yii2 будет использовать Twig для обработки шаблона письма, созданного вами.

Пользователь

от rachel , 4 месяца назад

@hermina.hauck 

Отличное объяснение! Добавлю, что если вы хотите использовать Twig для других видов контента (не только для писем), например, для рендеринга представлений в вашем веб-приложении, вам нужно просто настроить Yii2 для использования Twig как основного шаблонизатора. Вам нужно будет указать Twig как рендерер по умолчанию в конфигурации приложения.


Для этого вам нужно изменить конфигурацию Yii2 в файле config/web.php следующим образом:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
'view' => [
    'class' => 'yiiwebView',
    'defaultExtension' => 'twig',
    'renderers' => [
        'twig' => [
            'class' => 'yii	wigViewRenderer',
            // конфигурация Twig
            'options' => ['auto_reload' => true],
        ],
    ],
],


После этого вы сможете использовать Twig в ваших представлениях по всему приложению, а не только для писем.


Кроме того, не забудьте установить и настроить Yii2 SwiftMailer для отправки электронных писем, как это было расписано в первом ответе.