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

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

همانطور که می دانیم فریم ورک Symfony یکی از بهترین فریم ورک های PHP است، که فریم ورک لاراول نیز از کامپوننت های سیمفونی استفاده می کند. با استفاده از سیمفونی می توانیم یاد بگیریم چطور برنامه های بزرگ را با روش درست توسعه دهیم. سیمفونی شما را مجبور خواهد ساخت تا چیزهایی مثل MVC را یاد بگیرید. بنابراین باعث خواهد شد دانش شما به عنوان یک توسعه دهنده افزایش یابد. بسیاری از پروژه های بزرگ مثل Laravel از کامپوننت های سیمفونی استفاده می کنند. بنابراین دانستن درباره فریم ورک سیمفونی باعث خواهد شد پرژه های دیگری مثل Drupal را توسعه دهید. یکی از مهمترین میزیت های Symfony پایدار بودن و داشتن مستندات غنی آن است!

یکی از میزیت های Laravel این است یادگیری آن به طور قابل ملاحظه راحت است. و همچنین ساخت چیزی را در کمترین زمان ممکن می سازد.

با این حال در این پست یکی از مستندات ۲۵ صفحه ای که شامل ۴ فصل کوتاه است در حال ترجمه است. هر فصل ۱۰ دقیقه زمان صرف می کند. در این ۴ فصل کوتاه یاد خواهیم گرفت چطور در کمترین زمان ممکن با مفاهیم و کدهای مهم در فریم ورک Symfony آشنا شویم تا بتوانیم پروژه های کوجکی را توسعه دهیم.

symfony


 

فصل اول

در ۱۰ دقیقه شروع به استفاده از سیمفونی کنید!  در این فصل شما را با مهمترین مفاهیم پشت پرده سیمفونی آشنا می‌کنیم و همچنین توضیح خواهیم داد در عمل چطور می‌توانیم یک پروژه ساده را به سرعت با Symfony شروع کرد.

 

اگر قبلاً از فریم ورک‌های وب استفاده کرده باشید، کار کردن با سیمفونی نیز همانند احساس بودن در خانه خواهد بود. اما اگر اینطور نیست، پس به روش‌های کاملاً جدید برای توسعه وب خوش آمدید.

 

نصب سیمفونی

قبل از اینکه ادامه فصل را مطالعه کنید، مطمئن شوید PHP و Symfony را همانطور که در کتاب سیمفونی در فصل نصب و راه اندازی توضیح داده شده است نصب کرده باشید. (برای نصب به این لینک مراجعه کنید)

 

درک اصول اولیه

یکی از اهداف اصلی یک فریم ورک سازماندهی کدهای شما است و همچنین این اجازه را به برنامه شما می‌دهد تا در طول زمان با اجتناب از مخلوط شدن کدهای مربوط به دیتابیس، تگ‌های HTML و دیگر کدهای PHP برنامه خود را توسعه دهید.قبل از هر چیز لازم است برای رسیدن به این هدف، چند مفهوم اساسی ریز در سیمفونی  یاد درک کنید.

وقتی در حال توسعه یک برنامه سیمفونی هستید، مسئولیت شما به عنوان یک توسعه‌دهنده، نوشتن کد برای ترسیم درخواست‌های (request) کاربر (به عنوان مثال/http://localhost:8000) به منابع مرتبط با آن است (صفحه Homepage).

کد برای اجرا در اکشن‌ها و کنترولر‌ها تعریف می شود. نقشه برداری بین request های کاربران و کدهای مربوط به آن، از طریق پیکربندی routing انجام می شود. و محتویات نمایش داده شده در مرورگر معمولاً با استفاده از template ها ارائه می شوند.

وقتی به آدرس http://localhost:8000/app/example مراجعه کنید، سیمفونی کنترولر تعریف شده در فایل src/AppBundle/Controller/DefaultController.php اجرا می‌کند و قالب app/Resources/views/default/index.html.twig را نمایش می دهد. در بخش‌های زیر شما با جزئیات کار با controller، route و template در سیمفونی آشنا می شوید.

 

Action و Controller

فایل src/AppBundle/Controller/DefaultController.php را با ویرایشگر خود باز کرده تا کدهای زیر را مشاهده کنید. (برای حالا، به تنظیمات Route@ نگاه نکنید چون در بخش بعدی توضیح داده خواهد شد):

 

در برنامه‌های سیمفونی، کنترولرها معمولاً  کلاس‌هایی هستند که با پسوند Controller تعریف شده اند. در این مثال، کنترلر با نام Default تعریف شده است و کلاس PHP با اسم DefaultController نامگذاری شده است.

متدهای تعریف شده در کنترلر action نامیده می‌شوند که معمولاً آن‌ها با یک URL برنامه مرتبط هستند و نام‌های آن‌ها با پسوند Action تعریف می شوند. در این مثال، کنترلر Default تنها یک action به نام index دارد که در متد indexAction تعریف شده است.

اکشن‌ها معمولاً بسیار کوتاه هستند – حدود 10-15 خط کد – به این دلیل که آن‌ها تنها بخش‌های مختلفی از برنامه را فراخوانی می‌کنند تا اطلاعات لازم برای نمایش نتیجه به کاربر را در template نمایش دهد.

در این مثال، اکشن index عملاً خالی است چون نیازی به فراخوانی متدهای دیگر ندارد. اکشن تنها قالب صفحه اصلی (Homepage) را نمایش می دهد.

 

Routing

سیمفونی action هر مسیر درخواست شده را مطابق با URL درخواست شده که در route برنامه تنظیم شده است را اجرا می کند. بار دیگر فایل src/AppBundle/Controller/DefaultController.php را باز کرده و نگاهی به سه خط کد بالایی متد indexAction بیندازید:

 

جالب اینجاست که این سه خط باعث می‌شوند با نوشتن comment یا حاشیه‌نویسی تنظیمات لازم برای مسیرها را انجام دهد. PHP annotation روشی مناسب برای پیکربندی متد بدون نوشتن کد PHP است. توجه داشته باشید که بلوک حاشیه نویسی با **/ شروع می شود، در حالی که در PHP با */ شروع می شود.

اولین پارامتر ()Route@ آدرس URL است که باعث می‌شود ماشه اجرای action مربوط به آن کشیده تا اجرا شود. همانطور که لازم نیست آدرس هاست برنامه خود را در URL اضافه کنید (http://example.com)، این URLها همیشه نسبی هستند و معمولاً با نام path شناخته می شوند. در این مورد مسیر / اشاره به صفحه اصلی (homepage) برنامه دارد. دومین پارامتر ()Route@ اختیاری است (”name=”homepage) و نامی را برای این مسیر تعریف می کند. در حال حاضر این نام مورد نیاز نیست، اما بعداً برای ارتباط صفحات مفید خواهد بود. با توجه به حاشیه نویسی Route("/", name="homepage")@ این کار باعث می‌شود یک route یا مسیر جدید به نام homepage که به سیمفونی دستور می‌دهد تا اکشن index از کنترلر Default را هنگام ورود کاربر به مسیر / برنامه اجرا شود.

علاوه بر حاشیه نویسی PHP، مسیرها می‌توانند در فایل‌های YAML، XML یا PHP پیکربندی شوند، همانطور که در بخش مسیرها از کتاب سیمفونی توضیح داده شده است.

 

Templates

تنها محتوای اکشن index این دستورالعمل PHP است:

متد ()this->render$ یک میانبر مناسب برای نمایش یک قالب است. سیمفونی تعدادی میانبر مفید برای هر controller به ارث برده شده از کلاس Controller فراهم می کند.

بطور پیشفرض، قالب‌ها یا template ها در دایرکتوری /app/Resources/views ذخیره می شوند. بنابراین، الگوی default/index.html.twig مربوط به app/Resouces/views/default/index.html/twig است. این فایل را باز کرده تا کدهای زیر را مشاهده کنید:

 

 

این قالب با Twig ساخته شده است، موتور الگو بندی (template engine) که برای برنامه‌های مدرن PHP است. بخش دوم از این آموزش نحوه‌ی کار با قالب‌ها در سیمفونی را نشان می دهد.

 

کار با محیط

حالا که درک بهتری از نحوه کار Symfony دارید، اجازه دهید نگاهی به صفحات پیشفرضی که سیمفونی نمایش می‌دهد بیندازیم. هنگام ورود به اولین صفحه یک نوار باریک همراه با لوگو سیمفونی مشاهده می کنید. این نوار ابزار debug است و بهترین دوست یک توسعه‌دهنده Syfmony است!

نصب Symfony

اما چیزی که در ابتدا مشاهده می‌کنید تنها یک نوار ساده است، بر روی بخش‌ها مختلف نوار کلیک کنید تا جزئیات بیشتری در رابطه با request، پارامترهای کوئری، جزئیات امنیتی و کوئری های دیتابیس نمایش دهد:

آموزش سیمفونی

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

اما سیمفونی چطور تشخیص می‌دهد که برنامه شما بصورت local یا نسخه نهایی از برنامه در سرور است؟ همینطور به خواندن ادامه دهید تا به مفاهیم execution environments برسیم.

 

محیط چیست؟

محیط، نشان دهنده یک گروه از تنظیمات است که برای اجرای برنامه خود مورد استفاده قرار می گیرد. سیمفونی دو نوع محیط دارد که dev پیشفرض آن است (مناسب برای زمانی که برنامه بصورت local در حال توسعه است) و prod (بهینه سازی شده برای وقتی که برنامه در سرور قرار دارد).

وقتی به آدرس http://localhost:8000 در مرورگر مراجعه می کنید، در‌واقع برنامه سیفونی خود را در محیط dev اجرا می کنید. برای مشاهده برنامه در محیط pord، آدرس http://localhost:8000/app.php را در مرورگر وارد کنید. اگر ترجیح می‌دهید که همیشه محیط dev نمایش داده شود، کافیست به آدرس http://localhost:8000/app_dev.php مراجعه کنید.

اصلی‌ترین تفاوت بین محیط‌ها (environments) این است که اطلاعات زیادی را به توسعه‌ دهنده وب نمایش می دهد، به این معنی که برنامه در بدترین حالت ممکن از نظر کارای است. در همین حال، prod از لحاظ کارایی در بهترین شرایط از بهینه است، به این معنی که تمام اطلاعت برای دیباگ و همچنین نوار ابزار دیباگ وب غیر فعال است.

تفاوت دیگر در بین محیط ها گزینه های پیکربندی مورد استفاده برای اجرای برنامه است. هنگامی که دسترسی به محیط dev را داشته باشید، سیمفونی فایل پیکربندی app/config/config_dev.yml را بارگذاری می‌کند و هنگامی که به محیط prod دسترسی داشته باشید، سیمفونی فایل app/config/config_prod.yml را اجرا می کند.

معمولاً محیط‌ها حجم زیادی از گزینه های پیکربندی را فراهم می کنند. به همین دلیل می‌توانید تنظیمات رایج خود را در فایل config.yml وارد کنید و جاهایی که لازم است تنظیمات خاص هر فایل را نادیده بگیرید:

در این مثال، فایل config_dev.yml فایل config.yml را وارد می‌کند و آنگاه هر نوع وجود نوار ابزار همراه با گزینه های خود را لغو می کند.

برای اطلاعات بیشتر مقاله Environments & Front Controllers (که در حال حاضر ترجمه نشده است) را مطالعه کنید.

سخن پایانی

تبریک! شما طعم اولین کدهای Symfony را چشیدید که خیلی هم سخت نبود، نه؟ چیزهای زیادی وجود دارند که باید کشف شوند، اما باید در حال حاضر یاد بگیرید که در‌واقع سیمفونی چطور پیاده‌سازی طراحی سایت را بهتر و سریعتر می کند. اگر مثل من مشتاق به یادگیری چیزهای بیشتر در سیمفونی هستید پس باید به بخش The View شیرجه بزنیم!