مفاهیم HTTP از زبان Symfony – بخش سوم

مفاهیم HTTP از زبان Symfony – بخش سوم

سفر از Request به Response

 

اشیاء Request و Response همانند HTTP‌ بسیار ساده هستند. سخترین بخش از ساخت یک برنامه نوشتن کدهایی است که در این میان رخ می دهد! به عبارتی، کار اصلی، نوشتن کدهایی است که اطلاعات درخواست (request) را دریافت و آن را ترجمه و مناسب با آن یک پاسخ (response) تحویل دهد.

 

برنامه شما احتمالا شامل بسیاری از امکانات مثل ارسال ایمیل، رسیدگی به فرم‌های ارسال، ذخیره داده در یک دیتابیس، نمایش صفحات HTML و حفاظت از آنها خواهد بود. چطور می شود تمام اینها را مدیریت کرد و انتظار داشته باشید کدها سازمان‌دهی شده و قابل نگهداری باشند.

 

Controller

 

بطور سنتی وقتی در حال ساخت برنامه هستیم، هر صفحه از سایت شامل فایل فیزیکی خود خواهد بود:

 

 

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

 

بهترین راه حل استفاده از controller است: فایلی PHP، که وظیفه رسیدگی به درخواست‌هایی را دارد که به برنامه ارسال می شود. به عنوان مثال:

 

  • /index.php که index.php را اجرا می کند
  • /index.php/contact که index.php را اجرا می کند
  • /index.php/blog که فایل index.php را اجرا می کند

 

توجه داشته باشید که ماژول mod_rewrite وب سرور Apache باید فعال باشد (یا معادل آن در وب سرورهای دیگر نظیر NginX)، این کار باعث می شود URL تمیزتر مثل / /contact و /blog داشته باشید.

حال هر request به یک صورت هندل می شود. به جای اینکه URLهای منحصر به فرد، فایل‌ها PHP متفاوت را اجرا کنند، controller اجرا خواهد شد. و مسیریابی URLهای متفاوت به بخش‌های متفاوت برنامه به صورت داخلی انجام می شود. با این روش هر دو مشکل را حل می کنیم. تقریبا تمام برنامه های مدرن وب مثل WordPress از این روش استفاده می کنند.

 

سازماندهی شده بمانید

 

داخل Controller شما می توانید مشخص کنید که کدام کد باید اجرا شود و چه محتوایی باید برگشت داده شود. برای این کار باید URI آمده را بررسی و بخش دیگری از کد بسته به مقدار را اجرا کنید. این می تواند بسیار آسان باشد:

 

 

حل این مشکل می تواند بسیار مشکل باشد. خوشبختانه Symfony دقیقا برای این کار طراحی شده است.

 

ساختار برنامه Symfony

 

وقتی به سیمفونی این اجازه را می دهید که به هر درخواست رسیدگی کند، زندگی نیز بسیار آسان تر خواهد بود. Symfony نیز از همان الگو برای هر request استفاده می کند:

 

ساختار برنامه در فریم ورک سیمفونی

 

Requestهای آمده از طریق routing تفسیر می شود و به تابع کنترولر که شی Response را برگشت می دهد ارسال می شود.

 

هر صفحه از سایت شما در یک فایل  تنظیم مسیریابی تعریف شده است که آدرس های متفاوت URL برای توابع متفاوت PHP ترسیم شده است. وظیفه هر تابع PHP، فراخوانی یک controller،  استفاده از اطلاعات درخواست و همراه با بسیاری از ابزارهای سیمفونی در دسترس که برای ایجاد و برگشت شی Response است. به عبارتی، controller جایی است که کد شما اجرا می شود:‌ جایی است که request تفسیر می شود و یک response ایجاد می شود.

 

به همین راحتی، اجازه دهید مرور کنیم:

 

  1. هر request یک فایل controller را اجرا می کند
  2. سیستم مسیریابی (routing) مشخص می کند که کدام تابع PHP باید بر اساس اطلاعاتی که از طریق request و تنظیمات routing ایجاد شده است،اجرا شود
  3. در این مرحله تابع PHP به درستی اجرا شده است، جایی است که کدها ایجاد و شی مناسب بر می گرداند

 

یک مثال درخواست در سیمفونی

 

بدون اینکه به عمق بیشتری از جزئیات شیرجه بزنیم، اجازه دهید این پروسه را در عمل مشاهده کنیم. فرض کنید می خواهیم صفحه /contact را به برنامه خود اضافه کنیم. ابتدا یک نقطه ورود برای /contact در فایل پیکربندی /contact اضافه می کنیم، برای این کار می توانید با یکی از فرمت های دلخواه YAMLXMLPHP استفاده کنیم:

 

YAML

 

XML

 

PHP

 

وقتی فردی صفحه /contact را مشاهده می کند، با این route تطبیق داده می شود و controller مشخص شده خود را اجرا می کند. همانطور که در بخش routing یاد خواهید گرفت، رشته AppBundle:Main:contact سینتکس کوتاهی است که اشاره به یک متد contactAction خاص PHP در داخل کلاس MainController دارد:

 

 

در این مثال بسیار ساده، controller به سادگی یک شی Response با خروجی <h1>Contact us!</h1> تولید می کند. در بخش Controller یاد می گیرید که کنترولر چطور یک قالب را نمایش می دهد.

 

سیمفونی:‌ برنامه خود را بسازید، نه ابزارهای خود را

 

شما حالا می دانید که هدف از هر برنامه‌ای تفسیر هر request و ایجاد یک response مناست است. به عنوان یک برنامه رو به رشد، بسیار سخت خواهد بود که کد شما مرتب و قابل استفاده مجدد باشد. همواره، وظایف پیچیده در آینده بارها و بارها استفاده خواهند شد. مثل درخواست به دیتابیس، نمایش و استفاده مجدد قالب‌ها، رسیدگی به فرم‌های ارسال، ارسال ایمیل‌ها، اعتبارسنجی ورودی های کاربر و امنیت.

 

خبر خوب این است که هیچ کدام از این مشکلات منحصر به فرد نیستند. Symfony فرم ورکی شامل مجموعه ای از ابزارها برای ساخت برنامه در اختیار می گذارد نه ساخت ابزارها. با سیمفونی هیچ چیز غیر ممکن نخواهد بود. شما آزادید که فریم ورک Symfony یا بخش از آن را به طور مستقل استفاده کنید.

 

ابزار مستقل: کاموننت‌های سیمفونی

 

خوب، پس سیمفونی چیست؟ در ابتدا، سیمفونی مجموعه ای شامل بیش از بیست کتابخانه مستقل است که می تواند در پروژه های پی اچ پی استفاده شود. از این کتابخانه ها در فریم ورک محبوب Laravel نیز استفاده شده است. به این کتابخانه ها کامپوننت‌های سیمفونی گویند، شامل چیزهایی مفید برای موقعیت ها مختلف. صرفنظر از اینکه چطور پروژه خود را توسعه می دهید، چند تا را در زیر مشاهده کنید:

 

HttpFoundation

شامل کلاس‌های Request و Response و همچنین کلاس‌هایی که برای session و آپلود فایل است.

 

Routing

یک سیستم مسیریابی قوی که اجازه می دهد مسیر مشخص (/contact) برای به کارگیری یک متد مثل contactAction() ترسیم کنید.

 

Form

یک فریم ورک با امکانات کامل و انعطاف پذیر برای ساخت فرم‌ها و رسیدگی به فرم‌های ارسال است.

 

Validator

سیستمی برای تعریف قوانینی در مورد داده ها و  آنگاه اعتبارسنجی داده‌های ارسال شده از سوی کاربر با قوانین تعریف شده.

 

Templating

ابزاری برای نمایش قالب‌ها با ویژگی ارثبری از دیگر قالب ها. به عنوان مثال یک الگو می تواند به عنوان یک قالب اصلی یا مادر تعریف شود و قالب های فرزند از الگو مادر استفاده کنند.

 

Security

کتابخانه‌ای قوی برای رسیدگی به انواع موضوعات امنیت در داخل برنامه.

 

Translation

فریم ورکی برای ترجمه رشته ها در برنامه.

 

هر کدام از این کاموننت‌ها مستقل هستند و می شود در هر نوع پروژه PHP استفاده شود. در صورت نیاز هر بخش می تواند ساخت و استفاده شود.

 

 

خلاصه

 

Symfony مجموعه ای از ابزارها برای توسعه سریع برنامه های وب است. کاربران عادی می توانند به سرعت شروع به توسعه با استفاده از توزیع های سیمفونی که یک اسکلت پیشفرض پروژه فراهم می کند کنند. برای کاربران حرفه ای محدودیت وجود ندارد.