PHP与模板引擎

我目前正在讨论PHP作为模板引擎与PHP之上的模板引擎之间的select。

你select什么,为什么?

我说为什么使用另一个模板引擎时,PHP是一个模板引擎本身。

对于模板引擎:

  1. 增加了最终用户定制的安全性。 纯PHP中的主题具有不受限制的对用户及其安装造成伤害的能力。 因此,模板引擎可以消除这种风险,如果这是一个好的话。
  2. 易于使用的非程序员,如graphics艺术家或网页devise师。

对于普通的php:

  1. 纯PHP的速度无法与其上面build立的任何模板引擎匹配。
  2. PHP的全部function可用于输出,而不仅仅是解释或过滤的部分。

如果可能的话,我更喜欢PHP本身。 而且大多数人不想通过制作自定义主题来破解软件,所以很容易粗略阅读并调查其安全性。 也就是说,我是既有模板又有编程的“人”,甚至是一些平面艺术; 我的技能不同于严格的程序员和严格的艺术家/devise师。

我发现当我介绍Smarty时,让网页devise师用smartyvariables生成HTML是相当直接的。 编程团队的人员现在专注于更多的后端工作,即生成Smartyvariables的内容。

这缩短了开发生命周期,可以让更多的人分工,最终导致更好的devise。

那么,这只是我的意见,但模板引擎吸。 你必须先了解模板引擎是如何实现的,然后学习如何使用它。 似乎只是浪费时间,因为PHP本身就是最好的,并提供更多的灵活性。

以下原因适用:

  • 使用引擎将您的应用程序分离为模板使您的应用程序更容易停止代码错误
  • 使用模板可以在将来重构时为您提供更大的灵活性,因为命名空间不会直接构build到应用程序中
  • 使用模板鼓励(强制)开发人员保持表示层的业务逻辑和代码。
  • 使用模板更容易模拟数据集并将其传递给模板引擎,并预览网站的外观与数据

如果你有一个非程序员在做模板,使用模板引擎会很有帮助。 在许多情况下,简单的模板语言对于非程序员来说比PHP本身更容易拾取。

也就是说,当我只是我(或者我和其他开发人员)时,我发现自己正在使用模板。

PHP 不是一个模板引擎,而是一种可用于编写模板或模板引擎的语言。 模板引擎不仅仅是一种语言,还包括编程API,它允许脚本定位,组织模板或将脚本中的数据分配给它们。 纯PHP提供给你绝对没有 – 它只是一种语言。 相反,你应该把Zend Framework中的Zend_View这样的库进行比较(基本上,和Smarty一样,除了使用PHP来编写模板)。 你应该问你是否应该使用PHP或其他模板引擎作为模板语言。

当涉及到模板语言本身,那么…普通的循环和条件就足以编写模板,但这个“足够”并不意味着它很容易,舒适,高效或灵活。 PHP并没有为模板devise人员提供任何特殊的function,但许多“模板语言”(如Smarty)仅提供PHP的有限子集,所以我并不觉得程序员selectPHP并不感到意外。 至less他们可以编写函数,并使用OOP,这对我来说太重了(在我看来),但确实有用,而且确实有帮助。

关键在于自定义模板语言不受PHP缺陷的限制,但是他们的devise人员并没有看到它,声称“显示variables和循环就足够了”。 模板语言可能更有效的可能区域:

  • 表单显示和渲染(我还没有看到任何框架与PHP作为模板语言,提供了一个简单,灵活和通用的系统来定制窗体外观)。
  • 了解HTML / XML文档结构。
  • 自动XSS注入filter。
  • 解决表示层中的各种常见问题(即定制分页系统的外观,在列中显示数据等)
  • 模板可移植性以及应用程序逻辑和模板实现细节的真正分离。

上面提到了遵循这种方式的模板语言的例子PHPTAL和Open Power Template 2.在TinyButStrong中也可以find一些类似的想法,但不幸的是这个模板引擎非常慢。

PHP作为模板引擎不会抱怨,当你混合你的HTML语法。 它会让你忘记closures标签,错误地嵌套它们等

PHP的输出在默认情况下不会被转义,所以除非您记得在任何地方严格添加htmlspecialchars() ,否则您的站点将具有HTML注入(XSS)漏洞。

 <p>Hello <?= $name ?></b> <!-- Simple template full of errors --> 

当您尝试正确生成XHTML时,这些问题会更糟糕。 这并不是说你不能用普通的PHP做到这一点 – 当然你可以 – 但是这需要更多的努力和勤奋。

这就是为什么我的build议是PHPTAL 。 OPT2也可以。

Savant是你正在寻找的。 它是一个很好的包装类,允许您在模板中使用PHP运算符,而不是在PHP之上解释新的模板语言。

优点:

不需要为系统增加额外的工作是有意义的。
没有开发人员的学习曲线如果你对每个人都有纪律,那么这就是要走的路。 器(Savant)

缺点:

尽pipeSavant鼓励您正确分离,但不会强迫开发人员将开发代码与业务逻辑分开。 我有一个决不应该被打破的规则。 您只能输出variables,在模板中使用条件和循环。 您绝不能允许开发人员在模板中创buildvariables。 不幸的是,无论你告诉他们多less次,开发者都不会这样做。 因此,使用像Smarty这样的引擎会变得值得,因为开发者被迫完全保持业务和devise的分离。

如果我为自己做一个项目或者没有很多开发者,我倾向于使用Savant。 如果它是一个比我大得多的项目,那么在build筑中,我会去找像Smarty这样的东西。

无论哪种方式,代码中的分离是使用Savant或Smarty的重要天气。 我相信也有其他的好select。

PHP非常适合大多数任务,但是模板引擎可以帮助项目更轻松地扩展。

像Smarty或PHPTAL这样的现成品牌如果没有时间来推出自己的产品(并且不需要比他们提供的产品更多的产品),那就太好了。 另外,如果你发现你需要更专业的东西,你可以很容易地用你自己的实现来replace/修改它们。

我个人对PHPTAL有很好的体验,主要是因为它保持了你的方式,很简单。

我发现在PHP中构build一个轻量级的模板引擎对我们来说效果最好。 允许良好的代码分离,我们的graphicsdevise师可以学习一些简单的规则,但大多数HTML / CSS不是PHP。 我可以在不考虑界面的情况下编写繁重的代码。

下面的文章总结了关于Template Engine for PHP的不同观点。

做第三种types的PHP模板 http://www.tinyblive.com/article_3rd_kind.html

PHP不是一个模板引擎,它是一种脚本语言。

我select任何新的项目可能会简单地使用PHP的模板function,可能与MVC框架相结合,而不是使用另一个模板引擎。 毕竟,为了代码的简单性或分离的清晰度,在代码中是否有{$myVar}<?= $myVar ?>并不重要。 更复杂的模板function(如条件,循环或后端技术(如caching))可以通过PHP或MVC框架(或更好)进行处理。

我已经使用了两种方法(有和没有模板引擎),但只在个人项目中,从来没有在团队项目中,所以也许在这样的设置中使用模板引擎是有争议的。

我不知道这是否是由于VirtueMart,Joomla或PHP中的模板的概念,但调整VirtueMart到自己的graphics主题是纯粹的地狱。 (我不是在谈论纯CSS样式。)

PHP编码function不断发展,devisefunction也是一样的,这就是为什么如果你和devise师和开发人员在一个团队中工作,你需要一个模板引擎来并行处理这个工作,让devise人员使用HTML。

我个人的select是Raintpl,因为轻量级,友好和快速在这里基准可以帮助您select(也smarty和专家很好!):

http://www.raintpl.com/PHP-Template-Engines-Speed-Test/

我最近写了一篇关于这个的博客文章。

为了安全起见,绝对使用模板引擎(Twig是安全的)。

一个好的模板引擎(如Twig)提供:

  • 安全(最重要的是如此)
  • 不详细(如PHP)
  • 更多的模板function

如果我不得不花时间学习一个独立的模板引擎,我宁愿花时间学习一个框架。 我的select是使用Zend Framework,当使用MVC方法实现时,Zend Framework为您提供框架的强大function,以及PHP自身的本地模板function。

自从我问这个问题以来,我碰到了胡子 。 这是一个无逻辑的模板语言。

所以这和PHP或者smarty不一样,你可以为你的模板添加各种各样的逻辑,但是迫使你把所有的逻辑保存在视图模型中。

这似乎是一个更好的select,然后切换到模板语言,其中逻辑仍然是可能的。

我在PHP中使用模板引擎,因为我更喜欢业务逻辑和表示逻辑之间的高度分离。 当您的PHP(或其他编程语言)没有分散的HTML时,Web编程更容易。 这是微软背后的代码如此受欢迎。

我使用了一个名为KudzuPHP的模板引擎。 它是我的经典ASP KudzuASP的一个端口。 它与许多模板引擎的不同之处在于,在模板引擎被调用之后,托pipe业务规则和逻辑的代码成为模板引擎的事件处理程序。 这种方法允许您修改模板(移动大型表示块),而不需要修改PHP代码的代码。

KudzuPHP包含它自己的图书馆系统,编写新的扩展标签和库很容易。

你可以在这里findKudzuPHP: http ://www.andrewfriedl.com/downloads/如果你想要一个embedded到Wordpress插件中的版本,它允许你在不使用PHP的情况下对Wordpress API进行编码go top WordPress.org并search“卡祖笛”。

目前,它使用起来更快,更容易。 在PHP模板引擎上做了一套基准testing之后,树枝在原生php语言之后排在第二位。