توسعه دهنده سمت سرور (پیاچپی و لاراول)
چرخه حیات درخواست در لاراول به زبان ساده
اعتماد به نفس بیشتری پیدا میکنیم اگر بدونیم ابزاری که استفاده میکنیم چطور کار میکنه، در واقع اگر نحوه عملکرد ابزاری رو متوجه بشیم احساس راحتی و اطمینان بیشتری نسبت بهش داریم.
شناخت چرخه حیات درخواست در لاراول قدم اول برای داشتن تجربه توسعه بهتر با این فریمورک هست، یعنی باید بدونیم چه پروسهای اتفاق میفته از زمانی که درخواست ارسال میشه تا زمانی که پاسخ برگشت داده میشه.
خلاصه چرخه حیات درخواستهای HTTP در لاراول: درخواست به نقطه ورود هدایت میشه، از لاراول نمونهسازی میشه، عناصر حیاتی راه اندازی میشن، service providerها ثبت و اجرا میشن و درخواست به سیستم روتینگ میرسه و از اونجا به یک route یا controller ارسال میشه و پاسخی تولید میشه که باید به نقطه ورود برگرده.
قدم اول: نقطه ورود
درخواست از سمت مرورگر به وبسرور(Apache / Nginx) میرسه و اون وبسرور براساس پیکربندی خودش این درخواست رو به نقطه ورود تمامی درخواستها در لاراول، یعنی فایل public/index.php
هدایت میکنه و بر این اساس میشه گفت که این فایل نقطه شروع کننده بارگذاری بقیه فریمورک هست.
همینطور تو این قدم autoloader که توسط Composer ساخته شده داخلindex.php
لود میشه:
و بعدش یک نمونه از اپلیکیشن لاراول از فایل bootstrap/app.php
بازیابی میشه:
قدم دوم: هستهها
درخواست ورودی براساس جنسش به HTTP Kernel یا Console Kernel ارسال میشه، این هستهها در واقع نقش نقطه مرکزی رو دارند که درخواستها براساس جنسشون از اونها عبور میکنند.
- اگر درخواست ورودی از جنس HTTP باشه، برای مثال از سمت مرورگر اومده باشه هسته اصلی
app/Http/Kernel.php
در نظر گرفته میشه. - اگر درخواست ورودی از جنس Console باشه، برای مثال از سمت ترمینال اومده باشه هسته اصلی
app/Console/Kernel.php
در نظر گرفته میشه.
درخواستها در هسته به متد ()handle
وارد میشن که به طور خلاصه کل کار این متد دریافت درخواست و برگشت دادن پاسخ هست.
به طور خلاصه میتونیم هستههای لاراول رو تو یه جمله خلاصه کنیم:
هستهها را به عنوان یک جعبه سیاه بزرگ ببینید که کل برنامه شما را نشان می دهد.
هستهها از کلاس والد دیگهای ارثبری میکنند که داخل اون کلاسها آرایهای با نام bootstrappers$
وجود داره که کلاسهای مختلفی به منظور راهاندازی در آن تعریف شدند. این کلاسها قبل از اجرا شدن درخواست ورودی اجرا میشن چون باید ویژگیهای حیاتی فریمورک مثل تشخیص محیط برنامه را راهاندازی کنند. در واقع پیکربندی هرچیزی که باید تا قبل از هندل شدن درخواست اصلی انجام بشه مثل پیکربندی سیستم مدیریت خطا، تنظیمات، لاگینگ و لود کردن facadeها و service providerها در این قسمت انجام میشه. همچنین لیستی از middlewareها فقط داخل هستهی HTTP تعریف شدند که درخواست ورودی باید قبل از هندل شدن توسط برنامه از اونها عبور کنه.
قدم سوم: Service Providers
لود کردن service providerها یکی از مهمترین عملیاتی بود که در پروسهی راهاندازی اجزای اصلی در قدم دوم اتفاق میافتاد، service providerها به نوع خودشون مسئول لود کردن قسمتها مختلف فریمورک لاراول مثل روتینگ و ایونت هستند.
تمامی service providerها در آرایهای با نام providers$
داخل فایل config/app.php
قرار دارند که با serviceProviderهای موجود در هسته ادغام میشوند و در این قدم آرایه مربوطه توسط لاراول پیمایش میشه و به ازای تمامی providerهای موجود از اونها نمونه سازی میکنه. بعد از نمونهسازی اولیه از service providerها اول متد register
روی هر کدوم از اونها صدا زده میشه که باعث ثبت شدنشون میشه و بعدش متد boot
روی هر کدوم از اونها صدا زده میشه.
اساسا ویژگیهای اصلی لاراول مثل روتینگ در قالب service providerها پیکربندی و ارائه میشن و با توجه به همین موضوع میشه گفت که عملیات مربوط به اجرای service providerها که از قدم دوم شروع میشه و تا قدم سوم ادامه پیدا میکنه جزو مهمترین عملیات در چرخه حیات یک درخواست هست.
قدم چهارم: مسیریابی
یکی از مهمترین providerها RouteServiceProvider
هست که وقتی متد boot
این provider اجرا میشه سیستم روتینگ هم راه اندازی میشه. در این مرحله درخواست ورودی به سیستم روتینگ میرسه و فایلهای مربوط به مسیریابی مثل api.php
و web.php
که در پوشه routes
هستند لود میشن و اگر درخواست از جنس HTTP باشه از middlewareهای مورد نیاز عبور میکنه و به یک route یا controller میرسه.
در مسیر راه درخواستهایی که از جنس Console هستند middleware تعریف نشده، پس اونها مستقیما به command
یا کلاس مورد نظر خودشون برای اجرا شدن میرسن.
قدم پنجم: اتمام ماجرا
اگر درخواست ما از جنس HTTP باشه سیستم روتینگ در نهایت درخواستها رو به controller ارسال میکنه ولی میتونه با حذف controller خودش مستقیما پاسخ مناسب رو برگردونه، controller به محض دریافت درخواست میتونه اقداماتی مثل دریافت اطلاعات از دیتابیس یا اعتبار سنجی فرم انجام بده و در نهایت این اطلاعات رو برای پردازش به view
مناسب ارسال کنه تا در اونجا یک پاسخ مناسب برای نمایش در مرورگر کاربر ایجاد بشه.
پاسخ برگشت داده شده این پتانسیل رو داره که از middleware ها عبور کنه که امکان ایجاد تغییرات در پاسخ رو فراهم میکنند. در ادامه، این پاسخ به متد()handle
در kernel میرسه و از اونجا برگشت داده میشه و به متد ()send
در public/index.php
برای نمایش در مرورگر وارد میشه.
البته بازهم در نظر داشته باشید که اگر درخواست ما از جنس Console باشه در مسیر خودش با middleware روبرو نمیشه، پس در مسیر بازگشت هم همینطوری هست و پاسخ مورد نظر با middlewareها برخورد نداره و مستقیما به متد ()handle
در kernel میرسه و از اونجا برگشت داده میشه و به متد ()send
که در public/index.php
برای نمایش در ترمینال وارد میشه.
تونستیم کنار هم دید کلی از نحوه کار لاراول رو بدست بیاریم و مطمئنا از این به بعد همه چیز در لاراول کمتر عجیب و جادویی به نظر میرسه و میتونیم با اطمینان و تسلط بیشتر به توسعه ایدهها بپردازیم.
مطلبی دیگر از این انتشارات
صف های لاراولی
مطلبی دیگر از این انتشارات
مقایسه Laravel vs Django... از دید یه لاراول کار که تازه رفته جنگو! بخش اول
مطلبی دیگر از این انتشارات
وصیت نامه لاراول