نسخه:

درخواست چرخه حیات

بررسی اجمالی

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

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

درخواست چرخه حیات

تمام درخواست ها به برنامه شما از طریق public/index.php اسکریپت هدایت می شوند. هنگام استفاده از آپاچی، .htaccess فایلی که با لاراول ارسال می شود، ارسال تمام درخواست ها به index.php . از اینجا، لاراول فرآیند رسیدگی به درخواست ها و برگرداندن پاسخ به مشتری را آغاز می کند. دریافت یک ایده کلی برای فرآیند بوت استرپ لاراول مفید خواهد بود، بنابراین اکنون به آن خواهیم پرداخت!

تا حد زیادی، مهم ترین مفهومی که هنگام یادگیری در مورد فرآیند بوت استرپ لاراول باید درک کرد، ارائه دهندگان خدمات است . app/config/app.php با باز کردن فایل پیکربندی و یافتن آرایه می توانید لیستی از ارائه دهندگان خدمات را پیدا کنید providers . این ارائه دهندگان به عنوان مکانیزم بوت استرپ اولیه برای لاراول عمل می کنند. اما، قبل از اینکه به بررسی ارائه دهندگان خدمات بپردازیم، اجازه دهید به index.php . پس از ورود درخواست به index.php فایل شما، bootstrap/start.php فایل بارگذاری می شود. این فایل شی جدید لاراول را ایجاد می کند Application که به عنوان یک ظرف IoC نیز عمل می کند .

پس از ایجاد Application شی، چند مسیر پروژه تنظیم می شود و شناسایی محیط انجام می شود. سپس یک اسکریپت بوت استرپ داخلی لاراول فراخوانی می شود. این فایل عمیقاً در منبع لاراول زندگی می‌کند و چند تنظیمات دیگر را براساس فایل‌های پیکربندی شما تنظیم می‌کند، مانند منطقه زمانی، گزارش خطا و غیره. اما، علاوه بر تنظیم این گزینه‌های پیکربندی نسبتاً بی‌اهمیت، کار بسیار مهمی را نیز انجام می‌دهد: ثبت‌ها همه ارائه دهندگان خدماتی که برای برنامه شما پیکربندی شده اند.

ارائه دهندگان خدمات ساده فقط یک روش دارند: register . این register روش زمانی فراخوانی می شود که ارائه دهنده سرویس با شی برنامه از طریق روش خود برنامه ثبت شده باشد register . در این روش، ارائه دهندگان خدمات موارد را با ظرف IoC ثبت می کنند . اساساً، هر ارائه‌دهنده خدمات یک یا چند بسته را به کانتینر متصل می‌کند، که به شما امکان می‌دهد به آن خدمات محدود شده در برنامه خود دسترسی داشته باشید. بنابراین، برای مثال، QueueServiceProvider رجیسترها بسته می شوند که کلاس های مختلف مربوط به صف را حل می کنند . البته، ارائه دهندگان خدمات ممکن است برای هر کار بوت استرپینگ استفاده شوند، نه فقط برای ثبت چیزها در کانتینر IoC. یک ارائه دهنده خدمات ممکن است شنوندگان رویداد، مشاهده composerان، دستورات Artisan و موارد دیگر را ثبت کند.

پس از ثبت نام همه ارائه دهندگان خدمات، app/start فایل های شما بارگیری می شوند. در نهایت فایل شما app/routes.php بارگذاری می شود. هنگامی که فایل شما routes.php بارگذاری شد، شی Request به برنامه ارسال می شود تا ممکن است به یک مسیر ارسال شود.

بنابراین، بیایید خلاصه کنیم:

  1. درخواست وارد public/index.php فایل می شود.
  2. bootstrap/start.php فایل برنامه ایجاد می کند و محیط را شناسایی می کند.
  3. فایل داخلی framework/start.php تنظیمات را پیکربندی می کند و ارائه دهندگان خدمات را بارگیری می کند.
  4. فایل های برنامه app/start بارگذاری می شوند.
  5. فایل برنامه app/routes.php بارگذاری شده است.
  6. شی درخواست ارسال شده به Application که شی Response را برمی گرداند.
  7. شی پاسخ به مشتری ارسال شد.

اکنون که ایده خوبی از نحوه رسیدگی به درخواست به یک برنامه لاراول دارید، اجازه دهید نگاهی دقیق تر به فایل های "شروع" بیندازیم!

شروع فایل ها

فایل های شروع برنامه شما در ذخیره می شوند app/start . به طور پیش‌فرض، سه مورد به برنامه شما اضافه می‌شود global.php local.php و artisan.php . برای اطلاعات بیشتر در مورد artisan.php ، به مستندات خط فرمان Artisan مراجعه کنید .

فایل global.php شروع به طور پیش فرض شامل چند مورد اساسی است، مانند ثبت Logger و گنجاندن app/filters.php فایل شما. با این حال، شما آزاد هستید که هر چیزی را که می خواهید به این فایل اضافه کنید. بدون در نظر گرفتن محیط، در هر درخواست به برنامه شما به طور خودکار گنجانده می شود . local.php از طرف دیگر، فایل فقط زمانی فراخوانی می شود که برنامه در حال اجرا در محیط باشد local . برای اطلاعات بیشتر در مورد محیط ها، اسناد پیکربندی را بررسی کنید .

البته اگر علاوه بر محیط های دیگری نیز دارید local ، می توانید برای آن محیط ها نیز فایل های شروع بسازید. هنگامی که برنامه شما در آن محیط اجرا می شود، آنها به طور خودکار شامل می شوند. بنابراین، برای مثال، اگر development محیطی را در bootstrap/start.php فایل خود پیکربندی کرده‌اید، می‌توانید app/start/development.php فایلی ایجاد کنید که زمانی که هر درخواستی در آن محیط وارد برنامه می‌شود، شامل می‌شود.

چه چیزی در فایل های شروع قرار می گیرد

فایل های شروع به عنوان یک مکان ساده برای قرار دادن هر کد "bootstrapping" عمل می کنند. برای مثال، می‌توانید یک View composer را ثبت کنید، تنظیمات برگزیده ورود به سیستم خود را پیکربندی کنید، برخی تنظیمات PHP را تنظیم کنید، و غیره. این کاملاً به شما بستگی دارد. البته، پرتاب همه کدهای بوت استرپینگ در فایل های شروع می تواند کثیف شود. برای برنامه‌های بزرگ، یا اگر احساس می‌کنید فایل‌های شروع شما به هم ریخته می‌شوند، به انتقال کدهای بوت استرپینگ به ارائه‌دهندگان خدمات فکر کنید .

رویدادهای برنامه

ثبت رویدادهای برنامه

همچنین می‌توانید پردازش درخواست قبل و بعد را با ثبت before ، و رویدادهای برنامه انجام دهید after : finish shutdown

App::before(function($request)
{
//
});
 
App::after(function($request, $response)
{
//
});

شنوندگان به این رویدادها اجرا می شود before و after هر درخواست به برنامه شما. این رویدادها می توانند برای فیلتر جهانی یا اصلاح جهانی پاسخ ها مفید باشند. می توانید آنها را در یکی از start فایل های خود یا در یک ارائه دهنده خدمات ثبت کنید .

همچنین می‌توانید شنونده‌ای را در matched رویداد ثبت کنید، که زمانی فعال می‌شود که یک درخواست دریافتی با یک مسیر مطابقت داشته باشد اما آن مسیر هنوز اجرا نشده است:

Route::matched(function($route, $request)
{
//
});

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