Rumah > pembangunan bahagian belakang > tutorial php > Twig - Enjin Templat PHP yang paling popular

Twig - Enjin Templat PHP yang paling popular

Lisa Kudrow
Lepaskan: 2025-02-09 09:07:11
asal
893 orang telah melayarinya

Twig - the Most Popular Stand-Alone PHP Template Engine

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!


Twig adalah enjin templat php. Tetapi bukan PHP sendiri enjin templat? Ya, tidak! Walaupun PHP pada asalnya digunakan sebagai enjin templat, ia tidak berkembang, dan walaupun kita masih boleh menggunakannya sebagai enjin templat, versi "Hello World" yang anda suka:

<?php echo "<p> Hello " . $name . "</p>"; ?>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
atau

<p>Hello {{ name }}</p>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
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 - the Most Popular Stand-Alone PHP Template Engine 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.

composer require twig/twig
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
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 bootstrap.php dengan kandungan berikut:

<?php echo "<p> Hello " . $name . "</p>"; ?>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Twig menggunakan objek teras bernama 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.

<p>Hello {{ name }}</p>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Ini adalah contoh mudah; Kemudian kami menggunakan kaedah 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.

composer require twig/twig
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Buka index.php di penyemak imbas anda (lawati localhost atau homestead.app, bergantung pada cara anda menyediakan hos dan pelayan) kini harus memaparkan skrin berikut:

Twig - the Most Popular Stand-Alone PHP Template Engine

Tetapi mari kita kembali dan lihat dengan lebih dekat pada kod templat kami. Terdapat dua jenis pemisah:

digunakan untuk mencetak hasil ekspresi atau operasi, manakala {{ ... }} 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. {% ... %}

(Kandungan berikut adalah serupa dengan teks asal, tetapi beberapa pelarasan pernyataan dan bahagian perenggan telah dibuat, dan kedudukan imej tetap tidak berubah)

Layout

Untuk mengelakkan unsur -unsur pendua (seperti tajuk dan footer) dalam templat, Twig membolehkan kita untuk templat sarang dalam templat, yang dipanggil blok. Untuk menggambarkan ini, mari kita memisahkan kandungan sebenar dari definisi HTML dalam contoh. Mari buat fail HTML baru dan namakannya

: layout.html

<?php
// 加载我们的自动加载器
require_once __DIR__.'/vendor/autoload.php';

// 指定我们的Twig模板位置
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');

// 实例化我们的Twig
$twig = new Twig_Environment($loader);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Kami mencipta blok yang dipanggil

. Kami bermaksud bahawa setiap templat yang meluas dari 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

<?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] );
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Twig juga membolehkan kita hanya memberi blok tunggal. Untuk melakukan ini, kita perlu memuatkan templat terlebih dahulu dan kemudian menjadikan blok tersebut.

<!DOCTYPE html>
<html lang="pt-BR">
    <head>
        <meta charset="UTF-8">
        <title>Twig Example</title>
    </head>
    <body>
    <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>
    </body>
</html>
Salin selepas log masuk
Salin selepas log masuk
Pada ketika ini, kami masih mempunyai halaman yang sama, tetapi kami mengurangkan kerumitannya dengan decoupling blok konteks.

Cache Objek

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:

<?php echo "<p> Hello " . $name . "</p>"; ?>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

(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 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: ..

<p>Hello {{ name }}</p>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
atau huruf:

composer require twig/twig
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Pengendali ini hanyalah gula sintaks fungsi

, dan ia berfungsi dengan cara yang sama seperti fungsi PHP 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

<?php
// 加载我们的自动加载器
require_once __DIR__.'/vendor/autoload.php';

// 指定我们的Twig模板位置
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');

// 实例化我们的Twig
$twig = new Twig_Environment($loader);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

pernyataan bersyarat

Twig juga menyediakan pernyataan bersyarat dalam bentuk

, 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

<?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] );
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

penapis

Penapis membolehkan kami menapis maklumat yang dihantar ke templat dan format maklumat yang dipaparkan. Mari kita lihat beberapa penapis yang paling biasa digunakan dan penting. Senarai lengkap penapis Twig boleh didapati di sini.

Tarikh dan

date_modify

Format penapis tarikh ke format yang diberikan. Seperti yang kita lihat dalam contoh: date

<!DOCTYPE html>
<html lang="pt-BR">
    <head>
        <meta charset="UTF-8">
        <title>Twig Example</title>
    </head>
    <body>
    <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>
    </body>
</html>
Salin selepas log masuk
Salin selepas log masuk
Kami memaparkan tarikh dalam format bulan/hari/tahun. Sebagai tambahan kepada penapis

, kita juga boleh menggunakan penapis date untuk menukar tarikh menggunakan penapis date_modify. Sebagai contoh, jika kita mahu menambah hari ke tarikh, kita boleh menggunakan yang berikut:

<!DOCTYPE html>
<html lang="pt-BR">
    <head>
        <meta charset="UTF-8">
        <title>Tutorial Example</title>
    </head>
    <body>
        {% block content %}
        {% endblock %}
    </body>
</html>
Salin selepas log masuk

format

Format rentetan yang diberikan dengan menggantikan semua ruang letak. Contohnya:

{% 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 %}
Salin selepas log masuk

striptags Penapis mengeluarkan tag SGML/XML dan menggantikan ruang bersebelahan dengan ruang:

<?php echo "<p> Hello " . $name . "</p>"; ?>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

escape

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 escape

<p>Hello {{ name }}</p>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
bersamaan dengan

composer require twig/twig
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

, js, css, url dan html_attr dasar melarikan diri juga tersedia. Mereka adalah JavaScript, CSS, URI, dan HTML Atribute Context Escape Strings, masing -masing.

Debug

Akhirnya, mari kita lihat debugging. Kadang -kadang kita perlu mengakses semua maklumat pembolehubah templat. Untuk melakukan ini, Twig mempunyai fungsi dump(). Fungsi ini tidak tersedia secara lalai. Semasa mewujudkan persekitaran ranting, kita perlu menambah lanjutan Twig_Extension_Debug:

<?php
// 加载我们的自动加载器
require_once __DIR__.'/vendor/autoload.php';

// 指定我们的Twig模板位置
$loader = new Twig_Loader_Filesystem(__DIR__.'/templates');

// 实例化我们的Twig
$twig = new Twig_Environment($loader);
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Langkah ini diperlukan supaya kami tidak sengaja membocorkan maklumat debug pada pelayan pengeluaran. Sebaik sahaja konfigurasi selesai, kami hanya menggunakan fungsi dump() untuk membuang semua maklumat mengenai pembolehubah templat.

<?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] );
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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)

Atas ialah kandungan terperinci Twig - Enjin Templat PHP yang paling popular. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan