我正在使用Twig学习Symfony2,但我也想知道如何用PHP编写模板。我有两个模板:
New message from {{ name }}
Sent from courot.com/contact
IP: {{ ip }}
{{ message|raw }}
和
{% for label, flashes in app.session.flashbag.all %}
{% for flash in flashes %}
<div class="alert alert-{{ label }}">
{{ flash }}
</div>
{% endfor %}
{% endfor %}
我想知道如何将它们转换为PHP模板。
答案 0 :(得分:2)
确保您已将php
添加到config.yml
文件中的模板配置中:
framework:
templating: { engines: ['twig', 'php'] }
然后在PHP中重写该代码并为您的模板提供.php
扩展名:
New message from <?php echo $view->escape($name) ?>
Sent from courot.com/contact
IP: <?php echo $view->escape($ip) ?>
<?php echo $message ?>
和
<?php foreach ($app->getSession()->getFlashbag()->all() as $label => $flashes): ?>
<?php foreach ($flashes as $flash): ?>
<div class="alert alert-<?php echo $view->escape($label) ?>">
<?php echo $view->escape($flash) ?>
</div>
<?php endforeach; ?>
<?php endforeach; ?>
请注意频繁使用$view->escape
。这是必要的,因为PHP没有像Twig那样的自动输出转义。唯一不需要转义的变量是message
,它通过管道传输到Twig版本的raw
过滤器中。
答案 1 :(得分:0)
首先,您必须配置项目以使用PHP模板。检查app/config/config.yml
是否已将此参数设置为:
framework:
templating: { engines: ['twig', 'php'] }
现在,您必须在模板上使用.php:
扩展名,并在控制器中将其渲染为:
public function indexAction() {
return $this->render('VendorBundlenameBundle:Index:index.html.php', array(
'ip' => $ip,
'message' => $message
));
}
最后在模板中使用您传递的变量名称,例如:
IP: <?php print $ip; ?>
Messsage: <?php htmlspecialchars($message); ?>