چرخهی حیات درخواست توی لاراول؛ یه نگاه عمیق
خلاصهٔ کاملتر
لاراول از بیرون ساده به نظر میرسه: یه route تعریف میکنی، به یه کنترلر وصلش میکنی، یه view یا JSON برمیگردونی و فریمورک بقیهاش رو انجام میده. اما همین سادگی میتونه حجمِ کاری که بین فرستادنِ درخواست توسط مرورگر و اجراشدنِ کنترلرت اتفاق میافته رو پنهان کنه. اون مسیر پنهان همون چرخهی حیات درخواستِ لاراوله.
فهمیدن این چرخه خیلی چیزها رو روشن میکنه: چرا service providerها اینقدر مهمان، چرا میدلور میتونه هم قبل و هم بعد از کنترلر اجرا بشه، چرا route model binding قبل از اکشن تو صدا زده میشه، چرا بعضی کد توی register() و بعضی توی boot() جا میگیره، و چرا میدلورِ terminable بعد از اینکه پاسخ فرستاده شده اجرا میشه.
مقاله روی مسیر HTTP تمرکز میکنه. درخواست از public/index.php وارد میشه، autoloader کامپوزر و bootstrap/app.php بارگذاری میشن، درخواست HTTP گرفته میشه و به اپلیکیشن سپرده میشه. بعد HTTP Kernel فریمورک رو bootstrap میکنه، درخواست از میدلورهای سراسری عبور میکنه، روتر route مطابق رو پیدا میکنه، میدلورهای route اجرا میشن و در نهایت کنترلر یا closure میدوه. بعد پاسخ آماده میشه، از میدلورها برعکس عبور میکنه و فرستاده میشه؛ در آخر هم callbackهای پایانی (termination) اجرا میشن.
مدل ذهنی سادهست: لاراول اپلیکیشن رو میسازه، درخواست رو از یه pipeline عبور میده، routeِ مطابق رو میدوه و بعد پاسخ رو از همون pipeline برمیگردونه. درخواست رو به داخل از میدلورها عبور میکنه (قبل از کنترلر) و پاسخ رو به بیرون (بعد از کنترلر). همین دوطرفهبودنه که میدلور رو قدرتمند میکنه؛ فقط نگهبانِ قبل از کنترلر نیست.
نکات کلیدی:
- چرخهی حیات درخواست، کارِ پنهانِ بین درخواست مرورگر و اجرای کنترلره
- مسیر از public/index.php شروع و به HTTP Kernel و bootstrap فریمورک میرسه
- درخواست به داخل و پاسخ به بیرون، هر دو از pipelineِ میدلورها عبور میکنن
- فهم این مسیر روشن میکنه چرا service providerها، register/boot و میدلور terminable مهمان




