Rumah >pembangunan bahagian belakang >tutorial php >Twig - Enjin Templat PHP yang paling popular
Twig: enjin templat php popular
Twig adalah enjin templat PHP yang popular yang dibangunkan oleh Sensio Labs. Twig bertindak pada kedua -dua frontend dan backend projek, dan boleh dilihat dari dua perspektif: ranting untuk pereka templat dan ranting untuk pemaju. Twig menggunakan objek teras bernama untuk menyimpan konfigurasi, sambungan, dan templat beban dari sistem fail atau di tempat lain. Twig menyokong templat bersarang (blok), mengelakkan pertindihan unsur -unsur dalam templat, dan boleh disusun templat untuk mempercepatkan permintaan berikutnya. Twig menyokong penyata bersyarat, gelung dan penapis untuk mengawal paparan maklumat dalam templat dan menyediakan keupayaan debug untuk membuang semua maklumat mengenai pembolehubah templat. Environment
Artikel ini telah dikaji semula oleh Wern Ancheta. Terima kasih kepada semua pengulas rakan sebaya SitePoint untuk mendapatkan kandungan SitePoint untuk yang terbaik!
<code class="language-php"><?php echo "<p> Hello " . $name . "</p>"; ?></code>atau
<code class="language-twig"><p>Hello {{ name }}</p></code>php adalah bahasa verbose yang dikuatkan apabila cuba mengeluarkan kandungan HTML. Sistem templat moden akan menghilangkan kesilapan separa dan menambah sedikit fungsi kepadanya. Ciri -ciri seperti keupayaan keselamatan dan debug adalah tulang belakang enjin templat moden. Hari ini, kami akan memberi tumpuan kepada ranting.
Twig adalah enjin templat yang dicipta oleh Sensio Labs (syarikat pembangunan Blackfire dan Symfony). Mari kita lihat kelebihan utamanya dan cara menggunakannya dalam projek anda.
Pemasangan
Terdapat dua cara untuk memasang Twig. Kami boleh menggunakan pakej tar yang terdapat di laman web mereka, atau menggunakan komposer seperti yang telah kami lakukan.
<code class="language-bash">composer require twig/twig</code>Kami menganggap anda menjalankan persekitaran di mana PHP ditubuhkan dan komposer dipasang di seluruh dunia. Cara terbaik ialah menggunakan Homestead bertambah baik - ia membolehkan anda mula menggunakannya dalam 5 minit pada mesin yang sama yang kami gunakan supaya kami boleh berada di halaman yang sama. Jika anda ingin mengetahui lebih lanjut mengenai persekitaran PHP, kami mempunyai buku berbayar yang sangat baik mengenai perkara ini untuk pembelian.
kita perlu menjelaskan sesuatu sebelum kita dapat meneruskan. Sebagai enjin templat, Twig bertindak pada kedua -dua frontend dan backend projek. Oleh itu, kita dapat melihat ranting dari dua perspektif yang berbeza: Twig untuk pereka templat dan ranting untuk pemaju. Di satu pihak, kami menyediakan semua data yang kami perlukan;
Penggunaan Asas
Untuk menggambarkan penggunaan asas Twig, mari buat projek mudah. Pertama, kita perlu ranting bootstrap. Mari buat fail Twig menggunakan objek teras bernama Ini adalah contoh mudah; Kemudian kami menggunakan kaedah Buka digunakan untuk mencetak hasil ekspresi atau operasi, manakala (Kandungan berikut adalah serupa dengan teks asal, tetapi beberapa pelarasan pernyataan dan bahagian perenggan telah dibuat, dan kedudukan imej tetap tidak berubah)
Layout
: . Kami bermaksud bahawa setiap templat yang meluas dari
Cache Objek (Kandungan berikut adalah serupa dengan teks asal, tetapi beberapa pelarasan pernyataan dan bahagian perenggan telah dibuat, dan kedudukan imej tetap tidak berubah) Cycle Dalam contoh kami, kami telah melihat bagaimana untuk gelung dengan ranting. Pada asasnya, kami menggunakan tag
, dan ia berfungsi dengan cara yang sama seperti fungsi PHP pernyataan bersyarat
, penapis
Format penapis tarikh ke format yang diberikan. Seperti yang kita lihat dalam contoh: , kita juga boleh menggunakan penapis
adalah salah satu penapis yang paling penting. Ia menapis rentetan untuk memasukkan dengan selamat ke dalam output akhir. Secara lalai, ia menggunakan dasar melarikan diri HTML, jadi
, Debug Akhirnya, mari kita lihat debugging. Kadang -kadang kita perlu mengakses semua maklumat pembolehubah templat. Untuk melakukan ini, Twig mempunyai fungsi Langkah ini diperlukan supaya kami tidak sengaja membocorkan maklumat debug pada pelayan pengeluaran. Sebaik sahaja konfigurasi selesai, kami hanya menggunakan fungsi Kesimpulan Saya harap artikel ini akan memberi anda asas yang kukuh untuk asas -asas ranting dan memulakan projek anda dengan segera! Jika anda ingin melihat lebih mendalam di Twig, laman web rasmi menyediakan dokumentasi dan rujukan yang sangat baik yang boleh anda periksa. Adakah anda menggunakan enjin templat? Apa pendapat anda tentang Twig? Adakah anda membandingkannya dengan alternatif popular seperti Blade atau Smarty? (kandungan berikut adalah FAQ, teks asal telah dimasukkan, ditinggalkan di sini) bootstrap.php
dengan kandungan berikut: <code class="language-php"><?php echo "<p> Hello " . $name . "</p>"; ?></code>
Environment
. Contoh jenis ini digunakan untuk menyimpan konfigurasi, sambungan, dan templat beban dari sistem fail atau lokasi lain. Selepas Boots Contoh Twig kami, kami boleh meneruskan dan membuat fail index.php
di mana ia memuat beberapa data dan meluluskannya ke templat Twig. <code class="language-twig"><p>Hello {{ name }}</p></code>
render()
, yang menerima nama templat (ini adalah fail dalam folder templat yang kami tentukan sebelumnya) dan data yang kami mahu lulus ke template. Untuk melengkapkan contoh kami, mari pergi ke folder /templates
kami dan buat fail index.html
. Pertama, mari kita lihat templat itu sendiri. <code class="language-bash">composer require twig/twig</code>
index.php
di penyemak imbas anda (lawati localhost atau homestead.app, bergantung pada cara anda menyediakan hos dan pelayan) kini harus memaparkan skrin berikut:
{{ ... }}
digunakan untuk melaksanakan pernyataan seperti pernyataan bersyarat dan gelung. Pembatas ini adalah struktur bahasa utama Twig, yang menggunakan Twig untuk "memaklumkan" templat yang mesti menjadikan elemen ranting. {% ... %}
layout.html
<code class="language-php"><?php
// 加载我们的自动加载器
require_once __DIR__.'/vendor/autoload.php';
// 指定我们的Twig模板位置
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');
// 实例化我们的Twig
$twig = new Twig_Environment($loader);</code>
Kami mencipta blok yang dipanggil content
boleh melaksanakan blok layout.html
, yang akan dipaparkan di lokasi tersebut. Dengan cara ini, kita boleh menggunakan semula susun atur beberapa kali tanpa menulis semula. Dalam kes ini, fail content
kini kelihatan seperti ini: index.html
<code class="language-php"><?php
require_once __DIR__.'/bootstrap.php';
// 创建产品列表
$products = [
[
'name' => 'Notebook',
'description' => 'Core i7',
'value' => 800.00,
'date_register' => '2017-06-22',
],
[
'name' => 'Mouse',
'description' => 'Razer',
'value' => 125.00,
'date_register' => '2017-10-25',
],
[
'name' => 'Keyboard',
'description' => 'Mechanical Keyboard',
'value' => 250.00,
'date_register' => '2017-06-23',
],
];
// 渲染我们的视图
echo $twig->render('index.html', ['products' => $products] );</code>
Twig juga membolehkan kita hanya memberi blok tunggal. Untuk melakukan ini, kita perlu memuatkan templat terlebih dahulu dan kemudian menjadikan blok tersebut. <code class="language-html"><!DOCTYPE html>
<meta charset="UTF-8">
<title>Twig Example</title>
<table> border="1" style="width: 80%;">
<thead>
<tr>
<td>Product</td>
<td>Description</td>
<td>Value</td>
<td>Date</td>
</tr>
</thead>
<tbody>
{% for product in products %}
<tr>
<td>{{ product.name }}</td>
<td>{{ product.description }}</td>
<td>{{ product.value }}</td>
<td>{{ product.date_register|date("m/d/Y") }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</code>
Pada ketika ini, kami masih mempunyai halaman yang sama, tetapi kami mengurangkan kerumitannya dengan decoupling blok konteks. Environment
bukan sahaja boleh digunakan untuk memuatkan templat. Jika kita lulus menggunakan pilihan cache
direktori yang berkaitan, Twig akan cache templat yang disusun, dengan itu mengelakkan parsing templat dalam permintaan berikutnya. Templat yang disusun akan disimpan dalam direktori yang kami sediakan. Perhatikan bahawa ini adalah cache untuk templat yang disusun, bukan cache untuk templat yang dinilai. Ini bermakna Twig akan mengurai, menyusun dan menyimpan fail templat. Semua permintaan berikutnya masih memerlukan templat penilaian, tetapi langkah pertama sudah dilakukan untuk anda. Mari kita cache templat dalam contoh dengan mengedit fail bootstrap.php
: <code class="language-php"><?php echo "<p> Hello " . $name . "</p>"; ?></code>
for
dan memberikan alias kepada setiap elemen dalam array yang ditentukan. Dalam kes ini, kami memberikan alias kepada array products
. Selepas itu, kita boleh menggunakan pengendali product
untuk mengakses semua sifat dalam setiap elemen array. Kami menggunakan tag .
untuk menunjukkan hujung gelung. Kami juga boleh melengkung melalui nombor atau huruf menggunakan pengendali endfor
. Seperti yang ditunjukkan di bawah: ..
<code class="language-twig"><p>Hello {{ name }}</p></code>
atau huruf: <code class="language-bash">composer require twig/twig</code>
Pengendali ini hanyalah gula sintaks fungsi range
asli. Pilihan yang sama berguna ialah menambah syarat ke gelung. Menggunakan keadaan, kita boleh menapis unsur -unsur untuk berulang. Katakan kami ingin melangkah ke atas semua produk dengan nilai kurang daripada 250: range
<code class="language-php"><?php
// 加载我们的自动加载器
require_once __DIR__.'/vendor/autoload.php';
// 指定我们的Twig模板位置
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');
// 实例化我们的Twig
$twig = new Twig_Environment($loader);</code>
if
, elseif
dan if not
tag. Sama seperti dalam mana -mana bahasa pengaturcaraan, kita boleh menggunakan tag ini untuk menapis keadaan dalam templat. Katakan dalam contoh kami, kami ingin memaparkan hanya produk dengan nilai di atas 500: else
<code class="language-php"><?php
require_once __DIR__.'/bootstrap.php';
// 创建产品列表
$products = [
[
'name' => 'Notebook',
'description' => 'Core i7',
'value' => 800.00,
'date_register' => '2017-06-22',
],
[
'name' => 'Mouse',
'description' => 'Razer',
'value' => 125.00,
'date_register' => '2017-10-25',
],
[
'name' => 'Keyboard',
'description' => 'Mechanical Keyboard',
'value' => 250.00,
'date_register' => '2017-06-23',
],
];
// 渲染我们的视图
echo $twig->render('index.html', ['products' => $products] );</code>
date_modify
date
<code class="language-html"><!DOCTYPE html>
<meta charset="UTF-8">
<title>Twig Example</title>
<table> border="1" style="width: 80%;">
<thead>
<tr>
<td>Product</td>
<td>Description</td>
<td>Value</td>
<td>Date</td>
</tr>
</thead>
<tbody>
{% for product in products %}
<tr>
<td>{{ product.name }}</td>
<td>{{ product.description }}</td>
<td>{{ product.value }}</td>
<td>{{ product.date_register|date("m/d/Y") }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</code>
Kami memaparkan tarikh dalam format bulan/hari/tahun. Sebagai tambahan kepada penapis date
untuk menukar tarikh menggunakan penapis date_modify
. Sebagai contoh, jika kita mahu menambah hari ke tarikh, kita boleh menggunakan yang berikut: <code class="language-html"><!DOCTYPE html>
<meta charset="UTF-8">
<title>Tutorial Example</title>
{% block content %}
{% endblock %}
</code>
Format rentetan yang diberikan dengan menggantikan semua ruang letak. Contohnya: format
<code class="language-html">{% extends "layout.html" %}
{% block content %}
<table> border="1" style="width: 80%;">
<thead>
<tr>
<td>Product</td>
<td>Description</td>
<td>Value</td>
<td>Date</td>
</tr>
</thead>
<tbody>
{% for product in products %}
<tr>
<td>{{ product.name }}</td>
<td>{{ product.description }}</td>
<td>{{ product.value }}</td>
<td>{{ product.date_register|date("m/d/Y") }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}</code>
striptags
Penapis mengeluarkan tag SGML/XML dan menggantikan ruang bersebelahan dengan ruang: <code class="language-php"><?php echo "<p> Hello " . $name . "</p>"; ?></code>
escape
escape
<code class="language-twig"><p>Hello {{ name }}</p></code>
bersamaan dengan <code class="language-bash">composer require twig/twig</code>
js
, css
, url
dan html_attr
dasar melarikan diri juga tersedia. Mereka adalah JavaScript, CSS, URI, dan HTML Atribute Context Escape Strings, masing -masing. dump()
. Fungsi ini tidak tersedia secara lalai. Semasa mewujudkan persekitaran ranting, kita perlu menambah lanjutan Twig_Extension_Debug
: <code class="language-php"><?php
// 加载我们的自动加载器
require_once __DIR__.'/vendor/autoload.php';
// 指定我们的Twig模板位置
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');
// 实例化我们的Twig
$twig = new Twig_Environment($loader);</code>
dump()
untuk membuang semua maklumat mengenai pembolehubah templat. <code class="language-php"><?php
require_once __DIR__.'/bootstrap.php';
// 创建产品列表
$products = [
[
'name' => 'Notebook',
'description' => 'Core i7',
'value' => 800.00,
'date_register' => '2017-06-22',
],
[
'name' => 'Mouse',
'description' => 'Razer',
'value' => 125.00,
'date_register' => '2017-10-25',
],
[
'name' => 'Keyboard',
'description' => 'Mechanical Keyboard',
'value' => 250.00,
'date_register' => '2017-06-23',
],
];
// 渲染我们的视图
echo $twig->render('index.html', ['products' => $products] );</code>
Atas ialah kandungan terperinci Twig - Enjin Templat PHP yang paling popular. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!