/**
* @param EmailTemplate $value
* @param Constraint|EmailTemplateSyntax $constraint
*/
public function validate($value, Constraint $constraint)
{
// prepare templates to be validated
$itemsToValidate = [['field' => 'subject', 'locale' => null, 'template' => $value->getSubject()], ['field' => 'content', 'locale' => null, 'template' => $value->getContent()]];
$translations = $value->getTranslations();
foreach ($translations as $trans) {
if (in_array($trans->getField(), ['subject', 'content'])) {
$itemsToValidate[] = ['field' => $trans->getField(), 'locale' => $trans->getLocale(), 'template' => $trans->getContent()];
}
}
/** @var \Twig_Extension_Sandbox $sandbox */
$sandbox = $this->twig->getExtension('sandbox');
$sandbox->enableSandbox();
// validate templates' syntax
$errors = [];
foreach ($itemsToValidate as &$item) {
try {
$this->twig->parse($this->twig->tokenize($item['template']));
} catch (\Twig_Error_Syntax $e) {
$errors[] = ['field' => $item['field'], 'locale' => $item['locale'], 'error' => $e->getMessage()];
}
}
$sandbox->disableSandbox();
// add violations for found errors
if (!empty($errors)) {
foreach ($errors as $error) {
$this->context->addViolation($constraint->message, ['{{ field }}' => $this->getFieldLabel(ClassUtils::getClass($value), $error['field']), '{{ locale }}' => $this->getLocaleName($error['locale']), '{{ error }}' => $error['error']]);
}
}
}