与仅使用PHP相比,模板引擎的真正优势是什么?

2022-08-30 15:14:38

我仅使用PHP开发我的Web应用程序作为视图文件,我不觉得有任何限制,但我听说有一致数量的开发人员提倡“外部”模板引擎。那么模板引擎提供了简单的PHP所缺乏的什么呢?

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

  • 保姆糟糕的开发人员(即使用模板引擎,因为它迫使您不要将代码混合到演示文稿中)
  • 语法的简洁性(我在Vim中有映射,例如,使用大括号不会有任何区别)<?php echo $stuff; ?>
  • 对于非程序员来说,语法更简单(我独自开发,所以这不是问题)

答案 1

新语法


有些人不会同意,但是由于我一直在使用Twig,“为了......否则“感觉对。它可能不是很多,但它使我的模板更加干净。

{% for row in articles %}
 Display articles ...
{% else %}
 No articles.
{% endfor %}

自动转义


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

{% autoescape on %}
  Everything will be automatically escaped in this block
{% endautoescape %}

模板继承


我喜欢的另一个功能是扩展基本模板的功能。下面是一个基本示例

基本.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>

子.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 %}

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

我建议你试试Twig。非常有用。


答案 2

关注点分离。

当使用MVC / MTV方法时,这种事情是标准的 - 其中数据的呈现必然与数据的显示分开,但如果你使用的是普通的PHP,则不是这样。

使用模板引擎可以轻松分离出显示的内容和显示方式。

我想你可以争辩说这属于“照顾坏开发人员”,因为一个好的开发人员无论如何都应该这样做,但在我看来,模板引擎也使好的开发人员更容易。


推荐