使用PHP模板而不是Twig

时间:2013-08-20 14:07:28

标签: php symfony twig

我正在使用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模板。

2 个答案:

答案 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); ?>