Important
We are updating the images for OroCommerce version 6.1 to align with the latest changes in the back-office design. During this transition, some images may still show older versions. Thank you for your patience as we work to update all visuals to reflect these changes.
Rendering an Email Template
OroEmailBundle makes use of the TWIG engine to render an email template.
Note
For security reasons, an email template is :ref:` rendered in the sandbox mode <bundle-docs-platform-email-bundle-templates-rendering-sandbox>`.
Implementation Overview
The main entry point to render an email template is \Oro\Bundle\EmailBundle\Provider\EmailRenderer
. It expects a ready-to-be-rendered email template model, template parameters (further passed as TWIG variables) and email template context. More details about how to load an email template or get an email template context, see Loading Templates.
Examples
If you already have an email template entity to render, use \Oro\Bundle\EmailBundle\Provider\TranslatedEmailTemplateProvider
to translate and \Oro\Bundle\EmailBundle\Provider\EmailRenderer
to render it. Example:
use Oro\Bundle\EmailBundle\Entity\EmailTemplate as EmailTemplateEntity;
use Oro\Bundle\EmailBundle\Provider\EmailRenderer;
use Oro\Bundle\EmailBundle\Provider\EmailTemplateContextProvider;
use Oro\Bundle\EmailBundle\Provider\TranslatedEmailTemplateProvider;
use Oro\Bundle\NotificationBundle\Model\NotificationSettings;
use Oro\Bundle\UserBundle\Entity\User;
class Sample
{
private NotificationSettings $notificationSettings;
private TranslatedEmailTemplateProvider $translatedEmailTemplateProvider;
private EmailTemplateContextProvider $emailTemplateContextProvider;
private EmailRenderer $emailRenderer;
private User $user;
public function render(EmailTemplateEntity $emailTemplateEntity, array $templateParams)
{
// ...
$from = $this->notificationSettings->getSender();
$templateContext = $this->emailTemplateContextProvider
->getTemplateContext($from, $this->user, 'invite_user', $templateParams);
$translatedEmailTemplate = $this->translatedEmailTemplateProvider
->getTranslatedEmailTemplate($emailTemplateEntity, $templateContext['localization'] ?? null);
$renderedEmailTemplate = $this->emailRenderer->renderEmailTemplate($translatedEmailTemplate, $templateParams, $templateContext);
// ...
}
}
Note
To send an email with a rendered email template, see Send EmailBundle Templates.
If you have only an email template name, use \Oro\Bundle\EmailBundle\Provider\RenderedEmailTemplateProvider
that uses \Oro\Bundle\EmailBundle\Provider\EmailTemplateProvider
to load an email template and \Oro\Bundle\EmailBundle\Provider\EmailRenderer
to render it.
Example:
use Oro\Bundle\EmailBundle\Entity\EmailTemplate as EmailTemplateEntity;
use Oro\Bundle\EmailBundle\Model\EmailTemplateCriteria;
use Oro\Bundle\EmailBundle\Provider\EmailTemplateContextProvider;
use Oro\Bundle\EmailBundle\Provider\RenderedEmailTemplateProvider;
use Oro\Bundle\NotificationBundle\Model\NotificationSettings;
use Oro\Bundle\UserBundle\Entity\User;
class Sample
{
private NotificationSettings $notificationSettings;
private EmailTemplateContextProvider $emailTemplateContextProvider;
private RenderedEmailTemplateProvider $renderedEmailTemplateProvider;
private User $user;
public function render(EmailTemplateEntity $emailTemplateEntity, array $templateParams)
{
// ...
$from = $this->notificationSettings->getSender();
$emailTemplateCriteria = new EmailTemplateCriteria('invite_user', User::class);
$templateContext = $this->emailTemplateContextProvider
->getTemplateContext($from, $this->user, $emailTemplateCriteria, $templateParams);
$renderedEmailTemplate = $this->renderedEmailTemplateProvider
->findAndRenderEmailTemplate($emailTemplateCriteria, $templateParams, $templateContext);
// ...
}
}