مقدمه
Twig یک موتور قالبسازی (templating engine) قدرتمند، انعطافپذیر و بهینهسازی شده برای زبان برنامهنویسی PHP است. این موتور به توسعهدهندگان PHP اجازه میدهد تا منطق برنامه را از نمایش ظاهری آن جدا کنند، که منجر به کدی تمیزتر، قابل نگهداری بیشتر و امنتر میشود. Twig با الهام از موتورهای قالبسازی محبوبی مانند Jinja2 برای پایتون و Django templates، یک نحو ساده و قابل فهم را برای طراحی قالبها ارائه میدهد.
چرا از Twig استفاده کنیم؟
استفاده از یک موتور قالبسازی مانند Twig مزایای متعددی دارد:
- جداسازی منطق از نمایش: این مهمترین مزیت است. با
Twig،فایلهایPHPشما فقط شامل منطق کسبوکار میشوند و فایلهای قالب (با پسوند.twig) فقط مسئول نمایش دادهها هستند. این جداسازی، همکاری بین توسعهدهندگان بکاند و فرانتاند را آسانتر میکند. - امنیت:
Twigبه طور پیشفرض خروجیها را فیلتر (escapes) میکند. این ویژگی به محافظت در برابر حملاتXSS(Cross–SiteScripting) کمک میکند، زیرا به طور خودکار کاراکترهای خاص را به معادلهایHTMLآنها تبدیل میکند. - عملکرد:
Twigقالبها را به کلاسهایPHPکامپایل میکند. این فرآیند کامپایلینگ به معنای آن است که پس از اولین بار بارگذاری یک قالب، در دفعات بعدی بارگذاری آن سرعت به مراتب بالاتری خواهد داشت، چرا که دیگر نیازی به تفسیر مجدد نیست. - قابلیت توسعه:
Twigبسیار قابل توسعه است. شما میتوانید فیلترها، توابع و تگهای سفارشی خود را برای افزودن قابلیتهای خاص به قالبهایتان ایجاد کنید. - سادگی و خوانایی: نحو
Twigبسیار ساده و شبیه بهHTMLاست و یادگیری آن برای توسعهدهندگان فرانتاند نیز آسان است.
نصب و راهاندازی Twig
سادهترین راه برای نصب Twig استفاده از Composer، ابزار مدیریت پکیج برای PHP است. کافی است دستور زیر را در ترمینال خود در ریشه پروژه PHP خود اجرا کنید:
composer require twig/twig
پس از نصب، میتوانید Twig را در کد PHP خود به صورت زیر بارگذاری و استفاده کنید:
require_once 'vendor/autoload.php';
$loader = new \Twig\Loader\FilesystemLoader('مسیر/به/فایلهای/قالب');
$twig = new \Twig\Environment($loader, [
'cache' => 'مسیر/به/پوشه/کش', // اختیاری: برای افزایش عملکرد
]);
echo $twig->render('نام_قالب.twig', ['متغیر' => 'سلام Twig!']);
در کد بالا:
FilesystemLoaderبهTwigمیگوید که قالبها را در چه مسیری پیدا کند.Environmentکلاس اصلیTwigاست که پیکربندی و دسترسی به قابلیتهای آن را فراهم میکند.cacheمسیری برای ذخیره نسخههای کامپایل شده قالبها است.renderمتد اصلی برای رندر کردن یک قالب است. آرگومان اول نام فایل قالب و آرگومان دوم آرایهای از دادهها است که میخواهید به قالب ارسال کنید.
نحو Twig
Twig از سه نوع اصلی از “حدود” (delimiters) برای کنترل منطق در قالب استفاده میکند:
{{ ... }}: برای نمایش خروجی متغیرها یا نتایج توابع. این حدها به طور خودکار خروجی را فیلتر میکنند.{% ... %}: برای اجرای دستورات کنترلی مانند حلقهها، شرطها، و فراخوانی ماکروها.{# ... #}: برای اضافه کردن نظرات که در خروجی نهایی نمایش داده نمیشوند.
نمایش متغیرها
<p>سلام، {{ نام_کاربر }}!</p>
اگر متغیر نام_کاربر در PHP با مقدار “علی” ارسال شود، خروجی به صورت “سلام، علی!” خواهد بود.
فیلترها
فیلترها برای تغییر شکل دادهها قبل از نمایش استفاده میشوند. آنها با کاراکتر | اعمال میشوند.
<p>{{ عنوان | upper }}</p> {# همه حروف را بزرگ میکند #}
<p>{{ متن | striptags }}</p> {# تگهای HTML را حذف میکند #}
<p>{{ تاریخ | date('Y-m-d') }}</p> {# تاریخ را با فرمت خاصی نمایش میدهد #}
ساختارهای کنترلی (Loops و Conditions)
حلقهها (For Loop):
<ul>
{% for کاربر in کاربران %}
<li>{{ کاربر.نام }}</li>
{% else %}
<li>هیچ کاربری یافت نشد.</li>
{% endfor %}
</ul>
شرطها (If/Else):
{% if کاربر_وارد_شده %}
<p>خوش آمدید، {{ کاربر_وارد_شده.نام }}!</p>
{% else %}
<p>لطفاً وارد شوید.</p>
{% endif %}
ارثبری قالب (Template Inheritance)
یکی از قدرتمندترین ویژگیهای Twig ارثبری قالب است. این به شما امکان میدهد یک طرحبندی (layout) پایه ایجاد کرده و سپس صفحات مختلف را بر اساس آن بسازید، بدون اینکه نیاز به تکرار کد HTML مشترک داشته باشید.
layout.twig (قالب پایه):
<!DOCTYPE html>
<html>
<head>
<title>{% block عنوان %}عنوان پیشفرض{% endblock %}</title>
</head>
<body>
<header>
<h1>سایت من</h1>
</header>
<main>
{% block محتوا %}{% endblock %}
</main>
<footer>
<p>© 2023</p>
</footer>
</body>
</html>
page.twig (قالب فرزند):
{% extends 'layout.twig' %}
{% block عنوان %}صفحه اصلی{% endblock %}
{% block محتوا %}
<h2>این محتوای صفحه اصلی است.</h2>
<p>به سایت من خوش آمدید!</p>
{% endblock %}
در این مثال، page.twig از layout.twig ارثبری میکند و بلوکهای عنوان و محتوا را با محتوای خاص خود پر میکند.
نتیجهگیری
Twig ابزاری ضروری برای هر توسعهدهنده PHP است که به دنبال ساخت برنامههای وب سازمانیافته، امن و با کارایی بالا است. با جداسازی منطق از نمایش، فراهم کردن ویژگیهای امنیتی داخلی و ارائه یک نحو ساده و در عین حال قدرتمند، Twig فرآیند توسعه قالب را به طور قابل توجهی بهبود میبخشد و به شما امکان میدهد تا کدی تمیزتر و قابل نگهداریتر ایجاد کنید. یادگیری و استفاده از Twig سرمایهگذاری ارزشمندی برای هر پروژه PHP محسوب میشود.
