توجه! Symfony در برخورد اول شاید اعتیاد آور باشد! فصل دوم

توجه! Symfony در برخورد اول شاید اعتیاد آور باشد! فصل دوم

فصل دوم – View

بعد از خواندن فصل اول از این آموزش، به این نتیجه رسیدید که Symfony ارزشش را دارد که ۱۰ دقیقه دیگر باهاش همراه باشید. در بخش دوم از آموزش، درباره twig زیاد یاد خواهیم گرفت، سریع، انعطاف پذیر و امن‌ترین Template Engine برای برنامه های PHP است. Twig قالب های شما را قابل خواندن و خلاصه می کند و همچنین برای طراح‌های وب ابزاری دوست داشتنی است.

 

آشنایی با Twig

مستندات Twig بهترین منابع را برای یادگیری تمام چیز درباره این Template Engine فراهم می کند. این بخش تنها قرار است یک دید کلی از مفاهیم اصلی Twig را به شما نشان دهد.

یک قالب Twig فایل متنی است که می تواند هر نوع محتوا (HTML، CSS، JavaScript، XML، LaTeX و غیره)  را تولید کند. عناصر Twig از بقیه محتویات قالب با استفاده از جداکننده های زیر مجزا هستند:

چاپ مجتوای متغیر یا نتیجه حاصل از یک ارزیابی.

کنترل منطق قالب، به عنوان مثال برای اجرای حلقه for و if استفاده می شود.

اجازه می دهد تا از comment ها در درون قالب استفاده شود. بر خلاف comment های HTML، در قالب نمایش داده نمی شوند.

در زیر یک قالب ساده را مشاهده می کنید که چند اصول اولیه را نشان می دهد، با استفاده از دو متغیر page_title و navigation که می شود به قالب پاس داد:

برای نمایش یک قالب در Symfony، از متد render درون کنترولر استفاده می شود. اگر قالب احتیاجی به متغیرها داشته باشد تا محتوا تولید کند، آنها را به عنوان یک آرایه با آرگومان دوم اختیاری به قالب پاس دهید:

متغیرهای منتقل شده به یک قالب می تواند رشته، آرایه یا حتی شیء باشد. Twig این این اجازه را می دهد که با نقطه (.) به attribute های متغیر دسترسی داشته باشیم. کد زیر لیستی را نشان می دهد که چطور محتوای یک متغیر را بسته به نوع آن به کنترلر منتقل و نمایش دهیم:

 

آراستن قالب ها

قالب ها در پرژه عناصر مشترکی مثل header و footer دارند. Twig این مشکل را با مفهومی به نام “template inheritance” حل کرده است. این ویژگی به شما اجازه می دهد یک قالب اصلی که شامل تمام عناصر مشترک در سایت است داشته باشید و با تعریف بلوک‌هایی از محتوا که قالب های فرزند است آنها را نادیده بگیرند.

قالب index.html.twig از تگ extends استفاده می کند که نشان می دهد از قالب base.html.twig به ارث برده است:

فایل app/Resources/views/base.html.twig را باز کرده که مربوط به قالب base.html.twig بوده و کدهای Twig زیر را خواهید دید:

تگ‌های {% block %} به موتور قالب بندی می گویند که قالب فرزند ممکن است بخش‌هایی  از قالب را نادیده بگیرد. در این مثال، قالب index.html.twig بلوک body را نادیده می گیرد، اما بلوک title را نه! که محتوای پیشفرض تعریف شده در قالب base.html.twig را نمایش می دهد.

 

استفاده از تگ‌ها، فیلترها و توابع

یکی از مهمترین ویژگی های Twig توسعه پذیر بودن از طریق تگ‌ها، فیلترها و توابع است. نگاهی به قالب نمونه زیر بیندازید که با استفاده از فیلترها اطلاعات را قبل از نمایش به کاربر تغییر می دهد:

فراموش نشود که مستندات نگاهی به مستندات Twig بیندازید تا تمام چیزهای لازم در مورد فیلترها، و توابع و تگ‌ها را یاد بگیرید.

 

اضافه کردن قالب‌های دیگر

بهترین روش برای به اشتراک گذاری تکه کدهایی بین چندین قالب، ساخت قالب جدید که بتوان آن را در دیگر قالب ها اضافه (include) کرد.

فرض کنید می خواهیم تبلیغاتی را در برخی از صفحات برنامه خود داشته باشیم. ابتدا، قالب banner.html.twig را ایجاد کرده:

برای نمایش این تبلیغات در هر صفحه ای، قالب banner.html.twig را با استفاده از تابع include() به قالب اضافه کنید:

 

جاسازی دیگر کنترولرها

و چه می شود اگر بخواهیم نتیجه یک controller دیگر را در قالب اضافه کنیم؟ این بسیار مفید است وقتی با Ajax کار می کنیم، یا وقتی که قالب نیاز به برخی از متغیرهایی دارد که در قالب اصلی موجود نیست.

فرض می کنیم که مند کنترولر topArticlesAction را برای نمایش محبوبترین مقاله های یک وب سایت ایجاد کرده اید. اگر می خواهید نتیجه متد (معمولا محتوا HTML است) را داخل قالب index نمایش دهید، از تابع render() استفاده کنید:

در اینجا توابع render() و controller() از سینتکس ویژهAppBundle:Default:topArticles برای مراجعه به اکشن topArticlesAction از کنترولر Default استفاده کرده است (بخش AppBundle بعدا توضیح داده می شود):

 

ایجاد ارتباط بین صفحات

ایجاد ارتباط بین صفحات در برنامه های وب دیده می شود. تابع path می داند که چطور آدرس URL را بر اساس تنظیمات route تولید کند. به این صورت که تمام URL ها به سادگی با تغییر تنظیمات route به روز رسانی می شود:

تابع path نام مسیر (route) را به عنوان آرگومان قبل می کند و می توانید یک آرایه ای دلخواه از پارامترهای مسیرها را به عنوان آرگومان دوم به تابع path ارسال کنید.

تابع url بسیار شبیه به تابع path است اما URLهایی که برای نمایش ایمیل ها و فایل های RSS کاربرد دارد تولید می کند:

 

بارگذاری عکس ها، جاوا اسکریپت ها و سی اس اس ها

آیا اینترنت بدون عکس، جاوا اسکریپت و سی اس اس معنی خواهد داشت؟ سیمفونی از تابع asset برای کار با اینها استفاده می کند:

تابع asset() اشاره به منابع داخل دایرکتوری web/ دارد. اگر این منابع را در یک دایرکتوری دیگر ذخیره کرده اید، پیشنهاد می شود به مستندات Symfony مراجعه کنید.

استفاده از تابع asset باعث می شود برنامه شما قابل حمل باشد به این معنی که توسعه دهنده دیگر نیز به راحتی با برنامه شما کار کند. دلیل آن این است که می توانید ریشه برنامه خود را به هر نقطه از ریشه دایرکتوری web بدون تغییر چیزی در کد قالب منتقل کنید.

 

سخن پایانی

Twig بسیار ساده و قدرتمند است.  تشکر از طرح بندها، بلوک ها، قالب ها و اکشن ها. سازماندهی قالب ها را آسان می کند و باعث می شود قالب توسعه پذیر شود. تا اینجا ۲۰ دقیقه با Symfony کار کرده اما با این حال می توانید چیزهای جالب انجام دهید. این است قدرت فریم ورک سیمفونی. یادگیری اصول پایه آن راحت است و به زودی با معماری انعطاف پذیر أن اشنا خواهید شد.

اما من از خودم جلوتر رفته ام! ابتدا لازم است اطلاعات بیشتر در مورد کنترولرها به دست آورید. این چیزی است که در بخش بعدی به آن می پردازیم. آیا آماده اید ۱۰ دقیقه دیگر با Symfony همراه باشید؟