當我們在PHP中討論模板引擎時,許多開發(fā)人員會告訴你,這是沒有必要的矩动,他們會說這是學習時間和資源的浪費,因為PHP本質(zhì)上也是一個模板引擎释漆。但是當你看過很多框架之后悲没,你會發(fā)現(xiàn)很多框架都會有模板引擎的存在,所以說php中的模板引擎還是有必要了解一下的男图。
Mustache
受 ctemplate 和 et等的啟發(fā)示姿,Mustache 是一種與框架無關(guān)的方式來呈現(xiàn)無邏輯視圖。正如 ctemplates 所說逊笆,"它強調(diào)將邏輯與表示分離:不可能將應(yīng)用程序邏輯嵌入到這種模板語言中栈戳。視圖不是由 ERB 或 HAML 組成的視圖,而是包含隨機幫助器和任意邏輯难裆,而是分為兩個部分:PHP類 和 HTML 模板子檀。所有邏輯、決策和代碼都包含在視圖中乃戈。所有標記都包含在模板中褂痰。模板除了在視圖中的引用方法外,什么都不做症虑。這種嚴格的分離使編寫干凈的模板更容易缩歪,更容易測試視圖,并且更有趣地處理應(yīng)用的前端谍憔。
以下代碼段提供了 Mustaches 語法外觀的預(yù)覽:
Hello {{name}}
You have just won {{value}} dollars!
{{#in_ca}}
Well, {{taxed_value}} dollars, after taxes.
{{/in_ca}}
Plates
plates是一個原生PHP模板系統(tǒng)驶冒,快速,易于使用韵卤,易于擴展是它的特性骗污。它受到出色的 Twig 模板引擎的啟發(fā),并努力將現(xiàn)代模板語言功能引入 PHP 模板中沈条。plates原生的PHP 模板而不是編譯的模板語言(如 Twig 或 Smarty)需忿,因此受到對速度要求極致的開發(fā)人員喜愛。
此模板引擎具有:
原生的 PHP 模板蜡歹,無需學習新語法
plates是模板系統(tǒng)屋厘,而不是模板語言
plates鼓勵使用現(xiàn)有的PHP函數(shù)
通過模板布局和繼承增加代碼重用
用于將模板分組到命名空間的模板文件夾
跨模板的數(shù)據(jù)共享
將數(shù)據(jù)預(yù)先分配給特定模板
內(nèi)置逃生幫助器
易于使用的功能和擴展
與框架無關(guān),將與任何項目配合使用
分離設(shè)計使模板易于測試
可以使用composer引入
以下代碼段提供了板模板引擎語法外觀的預(yù)覽:
<?php
$this->layout('template', ['title' => 'User Profile']) ?>
<h1>Welcome!</h1>
<p>Hello <?=$this->e($name)?></p>
<h2>Friends</h2><ul>
<?php foreach($friends as $friend): ?>
<li>
<a href="/profile/<?=$this->e($friend->id)?>"> <?=$this->e($friend->name)?></a>
</li>
<?php endforeach ?></ul>
<?php if ($invitations): ?>
<h2>Invitations</h2> <p>You have some friend invites!</p>
<?php endif ?>
Blade
blade是laravel內(nèi)置的模板引擎月而。與其他流行的PHP模板引擎不同汗洒,Blade 不會限制您在視圖中使用純 PHP 代碼。事實上父款,所有 Blade 視圖都編譯成普通的 PHP 代碼并緩存溢谤,直到修改它們瞻凤,這意味著 Blade 基本上為應(yīng)用程序增加了零開銷。視圖文件使用 .blade.php 文件擴展名世杀。
然而離開laravel阀参,我們很少看到blade的身影,這也許也是它沒有更流行的一個原因吧瞻坝。
Volt
Volt 是一種超快且設(shè)計友好的模板語言蛛壳,采用 C 來編寫的。Volt 與 Phalcon 的其他組件高度集成所刀,就像您可以在應(yīng)用程序中將其用作獨立組件一樣衙荐。volt的靈感來自Jinja,最初由阿明·羅納徹創(chuàng)作浮创。赫模。Volt 的語法和功能已經(jīng)通過更多的元素進行了增強,當然蒸矛,開發(fā)人員在使用 Phalcon 時已經(jīng)習慣了它的極致性能瀑罗。
以下代碼段提供了 Volt 代碼外觀的快速預(yù)覽:
{# app/views/products/show.volt #}
{% block last_products %}
{% for product in products %}
* Name: {{ product.name|e }}
{% if product.status === 'Active' %}
Price: {{ product.price + product.taxes/100 }}
{% endif %}
{% endfor %}
{% endblock %}
Dwoo
Dwoo 是 PHP 的現(xiàn)代、靈活和面向的對象模板引擎雏掠,有助于將表示 (HTML/CSS) 與應(yīng)用程序邏輯分離斩祭。在許多方面,dwoo 與 Smarty 的模板和插件兼容乡话,因為 dwoo 的作者基于 Smarty 引入到 Web 開發(fā)領(lǐng)域的一般想法摧玫。
Dwoo 的模板引擎是一個寫得很好、面向?qū)ο蟮哪0逡姘笄啵c Smarty 相比诬像,它允許更輕松、更快的開發(fā)闸婴,并且它仍然足夠兼容坏挠,允許使用 Smarty 的開發(fā)人員平穩(wěn)過渡到 dwoo。
以下代碼段提供了 Dwoo 語法外觀的預(yù)覽:
<!DOCTYPE html>
<html>
<head>
<title>My Webpage</title>
</head>
<body>
<ul id="navigation">
{foreach $navigation item}
<li><a href="{$item.href}">{$item.caption}</a></li>
{/foreach}
</ul>
<h1>My Webpage</h1>
{$a_variable}
</body>
</html>
Smarty
Smarty 是誕生非常早的 PHP 的模板引擎邪乍,它設(shè)計之初就是為了將表示 (HTML/CSS) 與應(yīng)用程序邏輯分離降狠。這意味著PHP代碼是應(yīng)用程序邏輯,并且與表示分離庇楞。Smarty 將模板的副本編譯為 PHP 腳本榜配。通過這種方式,您可以獲得模板標記語法和 PHP 速度的優(yōu)點吕晌。首次調(diào)用每個模板蛋褥,然后從該點開始使用編譯版本,編譯一次睛驳。Smarty 會為您處理這一問題烙心,因此模板設(shè)計器只需編輯 Smarty 模板膜廊,就更改了編譯的版本,此方法使模板易于維護弃理,并且由于編譯的版本是PHP,操作代碼加速器(如 APC 或 ZendCache)將繼續(xù)處理已編譯的腳本屎蜓。
Smarty 是一個模板引擎痘昌,用作應(yīng)用程序的 View 組件。Smarty 可輕松與上面列出的任何引擎耦合為視圖組件炬转。Smarty 不保證良好的應(yīng)用程序設(shè)計或適當?shù)难菔痉蛛x辆苔,這仍然需要由有能力的開發(fā)人員和網(wǎng)頁設(shè)計人員來解決。
以下代碼段提供了語法外觀的預(yù)覽:
{include file="header.tpl" title="Info"}
User Information:<p>Name: {$name|capitalize}<br>
Address: {$address|escape}<br>
{include file="footer.tpl"}
Twig
Twig 是 PHP 的模板語言扼劈。Twig 使用類似于 Django 和 Jinja 模板語言的語法驻啤,這些語言啟發(fā)了 Twig 的發(fā)展。
快速:Twig編譯模板到純優(yōu)化的 PHP 代碼荐吵。與常規(guī)PHP代碼相比骑冗,開銷減少到最低限度。
安全:Twig具有用于評估不受信任的模板代碼的沙盒模式先煎。這允許 Twig 用作用戶可以修改模板設(shè)計的應(yīng)用程序的模板語言贼涩。
靈活:Twig由靈活的詞匯和解析器提供動力。這允許開發(fā)人員定義自己的自定義標記和篩選器薯蝎,并創(chuàng)建自己的 DSL遥倦。
Twig 支持輕松構(gòu)建強大模板所需的一切:多個繼承、塊占锯、自動輸出轉(zhuǎn)義等等袒哥。語法易于學習,并已經(jīng)過優(yōu)化消略,使 Web 設(shè)計人員無需妨礙其操作即可快速完成工作堡称。
以下代碼段提供了此模板引擎語法的預(yù)覽:
<div class="form-control">
<i class="fa fa-calendar"></i>
{{ form_label(form.dueDate) }}
{{ form_widget(form.dueDate) }}
<small>{{ form_help(form.dueDate) }}</small>
<div class="form-error"> {{ form_errors(form.dueDate) }} </div></div>
LATTE
latte也是PHP的模板引擎之一,它可簡化你的工作并確保輸出免受漏洞(如 XSS)的攻擊艺演。
latte是快速的:它將模板編譯為優(yōu)化的PHP代碼粮呢。
latte是安全的:它是第一個引入內(nèi)容轉(zhuǎn)義幫助的PHP引擎。
latte是易用的:它有直觀的語法幫助你輕松建立更好的網(wǎng)站钞艇。
latte語法是:
<ul n:if="$items">
{foreach $items as $item}
<li id="item-{$iterator->counter}">{$item|capitalize}</li>
{/foreach}
</ul>