1

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

4

2 回答 2

2

确保您已添加phpconfig.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 那样的自动输出转义。唯一不需要转义的变量是在 Twig 版本中通过message管道传输到过滤器中的变量。raw

于 2013-08-20T14:18:22.137 回答
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); ?>
于 2013-08-20T14:16:40.760 回答