درخواست چرخه حیات
بررسی اجمالی
هنگام استفاده از هر ابزاری در "دنیای واقعی"، اگر درک کنید که آن ابزار چگونه کار می کند، اعتماد به نفس بیشتری پیدا می کنید. توسعه برنامه نیز تفاوتی ندارد. وقتی نحوه عملکرد ابزارهای توسعه خود را درک می کنید، احساس راحتی و اطمینان بیشتری در استفاده از آنها خواهید داشت. هدف این سند ارائه یک نمای کلی خوب و سطح بالا از نحوه "کارکرد" چارچوب لاراول است. با شناخت بهتر چارچوب کلی، همه چیز کمتر «جادویی» به نظر میرسد و در ساخت برنامههای خود مطمئنتر خواهید بود. علاوه بر یک نمای کلی در سطح بالا از چرخه عمر درخواست، فایلهای "شروع" و رویدادهای برنامه را پوشش خواهیم داد.
اگر بلافاصله همه اصطلاحات را متوجه نشدید، دلتان را از دست ندهید! فقط سعی کنید درک اولیه ای از آنچه در حال وقوع است به دست آورید، و دانش شما با کاوش در بخش های دیگر اسناد افزایش می یابد.
درخواست چرخه حیات
تمام درخواست ها به برنامه شما از طریق
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 به برنامه ارسال می شود تا ممکن است به یک مسیر
ارسال شود.
بنابراین، بیایید خلاصه کنیم:
-
درخواست وارد
public/index.php
فایل می شود. -
bootstrap/start.php
فایل برنامه ایجاد می کند و محیط را شناسایی می کند. -
فایل داخلی
framework/start.php
تنظیمات را پیکربندی می کند و ارائه دهندگان خدمات را بارگیری می کند. -
فایل های برنامه
app/start
بارگذاری می شوند. -
فایل برنامه
app/routes.php
بارگذاری شده است. - شی درخواست ارسال شده به Application که شی Response را برمی گرداند.
- شی پاسخ به مشتری ارسال شد.
اکنون که ایده خوبی از نحوه رسیدگی به درخواست به یک برنامه لاراول دارید، اجازه دهید نگاهی دقیق تر به فایل های "شروع" بیندازیم!
شروع فایل ها
فایل های شروع برنامه شما در ذخیره می شوند
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
گردانندگان رویداد فراخوانی می شود و آخرین فرصت برای انجام هر کاری قبل از
پایان اسکریپت است.
به احتمال زیاد، نیازی به استفاده از هیچ یک از این رویدادها نخواهید داشت.