模板引擎比仅使用PHP有什么真正的优势?

Mat*_*iva 28 php templates template-engine

我只使用PHP开发我的Web应用程序用于视图文件,我不觉得有任何限制,但我听说有一致的开发人员提倡"外部"模板引擎.那么模板引擎提供的简单PHP缺乏什么呢?

我正在寻找实用的东西,所以我排除了以下内容:

  • 照顾糟糕的开发人员(即使用模板引擎,因为它会强迫您不要将代码混合到演示文稿中)
  • 语法简洁(我在Vim中<?php echo $stuff; ?>使用花括号进行映射,使用花括号不会有任何区别)
  • 非程序员的语法更简单(我单独开发,这不是问题)

The*_*per 22

新语法


有些人不会同意,但是因为我一直在使用Twig,"for ... else"感觉很对.它可能不是很多,但它使我的模板更清洁一点.

{% for row in articles %}
 Display articles ...
{% else %}
 No articles.
{% endfor %}
Run Code Online (Sandbox Code Playgroud)

自动转义


您可以让模板引擎自动转义任何输出.这很棒,因为你不再需要重复htmlspecialchars ......无处不在.Twig做得很好.

{% autoescape on %}
  Everything will be automatically escaped in this block
{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)

模板继承


我喜欢的另一个功能是扩展基本模板的能力.这是一个基本的例子

base.html模板

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  {% block head %}
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}{% endblock %} - My Webpage</title>
  {% endblock %}
</head>
<body>
  <div id="content">{% block content %}{% endblock %}</div>
  <div id="footer">
    {% block footer %}
      &copy; Copyright 2009 by <a href="http://domain.invalid/">you</a>.
    {% endblock %}
  </div>
</body>
Run Code Online (Sandbox Code Playgroud)

child.html模板

{% extends "base.html" %}

{% block title %}Index{% endblock %}
{% block head %}
  {% parent %}
  <style type="text/css">
    .important { color: #336699; }
  </style>
{% endblock %}
{% block content %}
  <h1>Index</h1>
  <p class="important">
    Welcome on my awesome homepage.
  </p>
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

子模板可以覆盖页面特定样式,内容等的块...您还可以注意到使用{%parent%}来抓取父项内容,这样您就不会在覆盖时丢失所有内容.

我建议你给Twig一个去.非常有用.

  • 它只是我,还是看起来像Django模板一样*很多? (4认同)

Dom*_*ger 10

关注点分离.

当使用MVC/MTV方法时,这类事情是标准的 - 数据的呈现必须与数据的显示分开,但如果您使用的是普通的PHP,则不然.

使用模板引擎可以轻松地将显示的内容与显示方式分开.

我想你可能会认为这属于"照顾坏开发者",因为一个优秀的开发者无论如何都应该这样做,但在我看来,模板引擎也让优秀的开发人员更容易.

  • 这听起来像是婴儿坐在我身上的争论. (5认同)
  • @EvilRyry:这比工作而不是婴儿坐着更多.代码*做*东西,模板*显示*东西.这两者是分开的,无关的.一个人应该能够在不改变行为的情况下改变外观.真正优秀的PHP程序员可能能够做到这一点,但模板引擎使得它变得更容易,因为您不再需要详细说明 - 只需将数据传递给模板引擎. (4认同)

Sch*_*els 8

轻松切换视图

根据网络的当前状态,我需要以不同的格式提供我的信息:

  • 一个静态的html页面
  • 另一个HTML页面上的动态加载视图
  • 数据的JSON对象
  • 我的flash部分中使用的数据的XML提要

这些格式的信息可以相同,只有视图不同.使用某种模板引擎,我可以在这些视图之间快速切换.

  • +1 - 想想PC版和移动版.这也使您可以更轻松地为假期或特殊销售设置不同的页面样式. (3认同)
  • 同意"使用某种模板引擎",不回答为什么外部引擎而不是PHP. (2认同)