چرخه ی حیات درخواست (Request Lifecycle)

اصول آموزش Laravel

تاریخ : یکشنبه 1 بهمن 1396

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

هدف اصلی این آموزش ارائه ی مرورکلی و سطح بالا بر نحوه ی عملکرد فریم ورک لاراول می باشد. پس از آشنایی با چارچوب کلی این فریم ورک، استفاده از همه چیز نسبتا آسان تر می شود و متعاقبا برنامه ی کاربردی خود را با اعتماد به نفس بیشتری طراحی خواهید کرد.

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


مرور کلی بر چرخه ی حیات

Entry point (نقطه ی شروع اجرای برنامه) تمامی درخواست ها به اپلیکیشن تحت وب لاراول فایل public/index.php می باشد. تمامی درخواست ها بر اساس پیکربندی سرور مجازی (وب سرور Apache / Nginx) به این فایل هدایت می شوند. فایل index.php حاوی مقدار کد زیادی نیست. در واقع فایل نام برده صرفا یک نقطه ی شروع برای بارگذاری باقی چارچوب نرم افزاری می باشد.

فایل index.php تعریف autoloader که توسط Composer تولید شده را بارگذاری می کند و سپس یک نمونه از برنامه ی کاربردی Laravel را از اسکریپتbootstrap/app.php بازیابی می کند. اولین عملیاتی که خود لاراول انجام می دهد ایجاد یک نمونه از برنامه ی کاربردی / Service container می باشد.


هسته های console / HTTP

سپس درخواست ورودی، بسته به نوع آن، یا به هسته ی HTTP و یا به هسته ی console ارسال می گردد. این دو هسته (kernel) به عنوان یک نقطه ی مرکزی برای تمامی درخواست های ورودی ایفای نقش می کند. بدین معنی که تمامی درخواست ها از این دو هسته عبور می کنند. اجالتا فقط به شرح هسته ی HTTP مقیم در مسیر app/Http/Kernel.php می پردازیم.

هسته ی HTTP از کلاس Illuminate\Foundation\Http\Kernel ارث بری می کند. این کلاس آرایه ای از bootstrapper ها تعریف کرده که پیش از اجرای درخواست اجرا می شوند. این bootstrapper ها (خود راه اندازه ها) وظیفه ی پیکربندی مدیریت خطاها، ثبت وقایع (logging)، همچنین تشخیص محیط برنامه و دیگر کارهایی که بایستی پیش از اداره و اجرای (خود) درخواست اجرا شوند را بر عهده دارد.

هسته ی HTTP همچنین یک لیست از middleware ها را تعریف می کند که تمامی درخواست ها بایستی پیش از مدیریت شدن توسط برنامه ی کاربردی از آن عبور کنند. این middleware ها وظیفه ی خواندن و نوشتن HTTP session، بررسی اینکه آیا برنامه در حالت تعمیر و نگهداشت قرار دارد یا خیر (maintenance mode) و نیز بررسی توکن CSRF را برعهده دارند (middleware یک سازوکار بهینه برای فیلتر کردن درخواست های HTTP تعبیه می کند. به عنوان مثال می توان به middleware تصدیق هویت برای login و ثبت ورود کاربر اشاره کرد).

امضای متد handle، از توابع هسته ی HTTP، بسیار ساده و قابل فهم می باشد: یک Request دریافت کرده و یک Response برگرداند (منظور از امضا یا signature متد همان اسم متد و تعداد پارامترهای ورودی و نیز نوع آن ها می باشد). می توانید به Kernel یا هسته به چشم یک جعبه ی سیاه نگاه کنید که کل برنامه ی شما را تشکیل می دهد (بیانگر کل برنامه ی شما می باشد). درخواست های HTTP را به آن خورانده و در خروجی پاسخ های HTTP را دریافت نمایید.

چرخه ی حیات درخواست (Request Lifecycle)


مفهوم Service Provider

یکی از مهمترین عملیات (تنظیم و راه اندازی به صورت خودکار) bootstrapping که هسته (kernel) عهده دار آن است، بارگذاری service provider برای اپلیکیشن تحت وب شما می باشد (منظور از bootstrapping ثبت و رجیستر binding و اتصال service container، event listener و middleware و حتی route ها است). تمامی service provider های برنامه در فایل پیکربندی config/app.php متعلق به آرایه یproviders تنظیم می شوند. به این صورت است که ابتدا متد register بر روی تمامی provider ها فراخوانی می شود، بعد از اینکه تمامیprovider ها ثبت و ایجاد شدند، آنگاه متد boot صدا زده می شود.

گفتنی است که service provider ها مسئولیت تنظیم و راه اندازی خودکار (bootstrapping) اجزاء مختلف برنامه را بر عهده دارند که از جمله یآن ها می توان به کامپوننت های database، queue، validation و routing اشاره کرد. از آنجایی که service provider ها تمامی ابزار و امکانات ارائه شده توسط فریم ورک لاراول را به صورت خودکار راه اندازی (bootstrap) و پیکربندی می کنند، می توان گفت که (service provider) مهمترین بخش کل فرایند تنظیم و راه اندازی خودکار لاراول محسوب می شوند.

چرخه ی حیات درخواست (Request Lifecycle)


ارسال درخواست (Dispatch Request)

پس از اینکه برنامه به صورت خودکار راه اندازی (bootstrap) شده و همچنین تمامی service provider ها کاملا ثبت شدند، Request برای ارسال (Dispatch) به router واگذار می شود. router علاوه بر ارسال درخواست به route یا controller، تمامی middleware های مختص بهroute نیز را اجرا می کند.


شرح دقیق Service Provider

Service provider ها مرکز پیکربندی و انجام تنظیمات پایه ای برنامه می باشند. به این صورت است که ابتدا نمونه ی اپلیکیشن ایجاد می شود و به دنبال آن service provider ها ثبت گردیده و سپس درخواست به اپلیکیشن تنظیم شده (bootstrapped app) فرستاده می شود. به همین راحتی!

داشتن فهمی عمیق از چگونگی ساخته شدن برنامه و تنظیم آن توسط service provider بسیار ازشمند می باشد. لازم به ذکر است که providerهای پیش فرض اپلیکیشن در پوشه ی app/Providers نگهداری می شوند.

به طور پیش فرض، AppServiceProvider تقریبا تهی می باشد. این provider مکان یا ظرف بسیار مناسبی برای افزودن service container binding ها و نیز فرایند پیکربندی (bootstrapping) اختصاصی برنامه ی تحت وب شما می باشد. لازم به گفتن نیست که برای برنامه های بزرگ بایستی چندین service provider ایجاد کرده و برای هر یک bootstrapping با درجه ی granuality بیشتر درنظر بگیرید (granularity به تعیین سطح جزیئات سیستم اشاره دارد).


منابع مورد مطالعه جهت جمع آوری این مطلب:
https://laravel.com/docs/5.5/lifecycle
www.tahlildadeh.com/ArticleDetails/آموزش-چرخه-حیات-درخواست-در-لاراول
www.lydaweb.com/article/courses/laravel-5-5-tutorial/160/service-container-لاراول


نظرات