【问题标题】:Variables not replaced in Twig templateTwig 模板中未替换的变量
【发布时间】:2023-04-04 04:10:01
【问题描述】:

我有这个 PHP 代码(只使用 Twig + SwiftMailer):

# Load Twig and swiftmailer
require_once('lib/SwiftMailer/swift_required.php');
require_once('lib/Twig/Autoloader.php');
Twig_Autoloader::register();

$loader = new Twig_Loader_Filesystem('views');
$twig = new Twig_Environment($loader, array(
    'cache' => 'cache',
));

$mailer = Swift_Mailer::newInstance(Swift_MailTransport::newInstance());

# Render twig template to a string
$template = $twig->loadTemplate('email.twig');
$body = $template->renderBlock('body', array('name' => $_POST["name"], 'letter' => $_POST["letter"]));

$message = Swift_Message::newInstance()
    ->setFrom("info@mydomain.com")
    ->setSubject("Hi, ".$_POST["name"]." blahblahblah")
    ->setBody($body, 'text/html')
    ->setTo($_POST["email"]);

# Send email, using PHP mail function
$retval = $mailer->send($message);

关于我的 email.twig 模板:

  • 它包含 {{ name }} 和 {{ letter }}
  • 它包含在 {% block body %} ... {% endblock %} 之间
  • 它有一个<style> 节点,带有一些CSS 样式。

更新:链接到模板here

邮件发送正确,但有2个问题

  • 第二个变量字母没有被替换。它是空的,即使 $_POST['letter'] 不是空的
  • 并非所有 CSS 样式都已正确应用。我想我不能在电子邮件中使用所有 CSS 属性。我说的对吗?

有什么线索吗?

【问题讨论】:

  • 您可以发布您的模板吗?就 CSS 而言,我们也必须看到这一点。请记住,每个电子邮件客户端都以不同的方式应用 css。内联 CSS 可以提供帮助 - 检查 stackoverflow.com/questions/791070/…
  • 抱歉耽搁了。我添加了指向模板的链接:raw.githubusercontent.com/jorgeas80/reyesmagos/master/views/…
  • 您是否使用硬编码变量对此进行了测试:array('name' => 'foo', 'letter' => 'bar'));?我没有在您的模板中看到任何奇怪的东西。
  • 是的,也使用硬编码的变量进行了测试。同样的问题。只是名字被替换了。也许它与 CSS 相关(段落具有关联的 CSS 样式)。很奇怪……不过还是谢谢!
  • 如果问题与 CSS 有关,您至少可以在电子邮件源代码中看到变量值。你能确认它在那里可见吗?

标签: php twig swiftmailer


【解决方案1】:

我遇到了类似的问题并找到了解决方案:这是由于模板中有一些不可打印的字符。不确定对您来说是否相同,但也许您应该尝试重写 {{ letter }} 部分。 (我的法文键盘插入一个不可见的字符,组合 Alt-Gr + 空格)。

Object variable don't display in a twig template

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 2012-05-04
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多