Внедрение ресурса Webpack в шаблонную электронную почту Twig с помощью Symfony Mailer - PullRequest
2 голосов
/ 21 сентября 2019

В почтовой документации Symfony говорится, что можно легко встроить изображение:

<img
    src="{{ email.image('@images/logo.png') }}"
    alt="Logo">

Однако все мои ресурсы созданы Webpack & Encore.Я также использую файл манифеста актива, потому что у каждого актива есть чанхэш в своем имени.

Как встроить изображение с помощью Twig в этом случае?Я пытался:

<img
    src="{{ email.image(asset('build/images/logo.png')) }}"
    alt="Logo">

Но это не работает.Я заканчиваю с исключением, что «шаблон отсутствует».Это хорошо работает, конечно, если я использую изображение из статического местоположения.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

Как сказано в документации: определите пространство имен Twig, которое указывает на любой каталог, в котором хранятся ваши изображения, например:

# config/packages/twig.yaml
twig:
    paths:
        # point this wherever your images live
        public/build/: build

далее, в шаблоне электронной почты:

{# '@build/' refers to the Twig namespace defined earlier #}
<img src="{{ email.image('@build/logo.png') }}" alt="Logo">
<img src="{{ email.image('@build/subdir/logo.png') }}" alt="Logo">

это не будет работать, если составное изображение имеет некоторый случайный суффикс, например, когда .enableVersioning() определен в webpack.config.js файле конфигурации.


Если вы включили стратегию управления версиями, вы можете сделать следующее:

# config/packages/twig.yaml
twig:
    paths:
        public/: public

и создайте имя шаблона, используя оператор строки concat ~:

{# '@public' refers to the Twig namespace defined earlier #}
<img src="{{ email.image('@public' ~ asset('build/logo.png')) }}" alt="Logo">
0 голосов
/ 21 сентября 2019

Есть два способа получить изображение в вашей почте.1-й - это встроенное изображение, а второй - просто ссылка на изображение где-то в сети.Если вы хотите встроить изображение, вам нужно будет прикрепить его к вашей почте:

$attachment = Swift_Image::newInstance($data, $filename, $mimeType)
    ->setDisposition('inline');

$cid = $message->embed($attachment); // Generates "cid:something"

Важно, чтобы ваше изображение показывалось так:

<img src="cid:something" ... />

Таким образом, вы должны отрендеритьваш шаблон выглядит так:

$twig->render('email/email.html.twig', [
    'cid' => $cid,
    ...
]);

, а в шаблоне веточки:

<img src="{{ cid }}" ... />
...