آموزش توابع و دستورات Service Providers در لاراول

معرفی سرویس Service Providers

Service provider ها بخش اصلی سیستم بوت استرپ لاراول است . نرم افزار لاراول شما، و همچنین تمام خدمات اصلی Laravel شما از طریق Service Providers تحت بوت استرپ ارائه شده است.

اما، “بوت استرپ” ٬ ‘bootstrapped’ چیست؟ به طور کلی، منظور ما ثبت نام چیزهایی است، از جمله ثبت نام اتصال بسته های سرویس، event listeners، middleware، و حتی route ها. Service Providers بخش مرکزی پیکربندی برنامه شما هستند.

اگر شما فایل config/app.php را باز می کنید ٬ شما آرایه های providers را خواهید دید . و همینطور تمام کلاس های service provider در همین بخش لود می شوند . البته بسیاری از این ارائه دهندگان “معلق”__’deferred’ هستند، به این معنی که آنها برای هر درخواست بارگذاری نمی شوند، اما تنها زمانی که خدمات هدف مورد نیاز است این سرویس ها لود می شوند .

 

تعریف کردن (ساختن) Service Providers

تمام service provider از بخش یا فایل Illuminate\Support\ServiceProvider  گسترش پیدا میکند . بیشتر service provider ها با دو متد register و boot تعریف می شوند .

شما فقط باید بعضی متد ها را به service container متصل کنید . توجه : شما هیچوقت نباید هر چیز که دم دستتان هست مانند route ها یا رویداد ها را با متد register در service provider  تعریف کنید چون از قبل برای بسیاری از کاربرد ها  Provider تعریف شده است به طور مثال برای آدرس های url سایت چون از قبل برای آن route ها در نظر گرفته شده است  .

شما از طریق Artisan می توانید provider جدید تعریف کنید :

متد Register در Service Provider ها

همانطور که در قبل هم ذکر شد شما با متد register فقط باید بعضی چیز ها را به Service Container و هسته اصلی لاراول متصل کنید . هرگز نباید   رویداد، url ها یا هر بخش دیگری از عملکرد را بدون استفاده از توابع قبلی به سمت ساخت تابع آن بروید .

در غیر این صورت، شما به طور تصادفی می توانید از یک سرویس ارائه شده توسط یک ارائه دهنده خدماتی که تا به حال بارگیری نشده است استفاده کنید.

بیایید نگاهی به یک service provider داشته باشیم. در هر یک از روشهای service provider شما، شما همیشه به خصوصیات $app دسترسی دارید که دسترسی به service container را فراهم می کند:

این service provider فقط نمونه و کارکردی برای تابع register می باشد . این متد تعریف شده تا Riak\Connection را در service container را پیاده سازی کند .

اگر شما نمی دانید چگونه service container کار می کند، آموزش : اینجا را بررسی کنید.

ویژه گی های دو تابع bindings و singletons

معنی : bindings (اجباری) – singletons (یگانه ٬تک)

service provider ها شما بعد از درست شدن از بسیاری از  توابع bindings را شامل می شوند . ممکن است شما بخواهید به جای container binding از خواص دو تابع bindings و singletons به صورت شخصی سازی شده استفاده کنید .

هنگامی که service provider توسط فریمورک بارگذاری می شود، به طور خودکار این ویژه گی ها را بررسی می کند و آنها را اجرا می کند:

متد Boot در لاراول

برای استفاده از view composer در لاراول شما باید از متد boot استفاده کنید . این متد بعد از تمام service providers ها اجرا می شود .به همین منظور شما به تمام متد ها سیستم دسترسی خواهید داشت .

تزریق وابستگی ها (Dependency Injection) در متد Boot

احتمال خیلی زیاد امکان دارد شما نیاز داشته باشید که به وابستگی یا ویژه گی های Boot دسترسی داشته باشید . به صورت خودکار service container تمام وابستگی ها (dependencies)  را در این متد تزریق می کند :

ساختن Providers (ها)

تمام service provider ها در فایل config/app.php تعریف شده است . در این فایل تمام آرایه های providers تعریف شده است . شما می توانید تمام کلاس های service providers را لیستش را در این فایل ببینید .

مجموعه ای از کلاس های در دسترس:

  • bootstrap
  • the core Laravel components
  • the mailer
  • queue
  • cache
  • و بسیاری دیگر …

برای تعریف provider خودتان ٬ آرایه زیر را باید به آن اضافه  کنید :

Provider های دارای تاخیر

اگر provider شما تنها در  service container  باشد، شما می توانید این تابع را به تاخیر بیندازید تا زمانی که یک bind فعال به آن درخواست بدهد . به تاخیر انداختن provider تا زمانی که نیاز نباشد می تواند به میزان بسیار زیادی باعث افزایش بهبود در پلتفرم لاراولی شما بشود .

لاراول لیستی از تمام ویژه گی های ارائه شده توسط service providers  بدون استفاده را جمع آوری و ذخیره می کند و همچنین نام کلاس ارائه دهنده خدمات آن را. سپس، تنها زمانی که شما  نیاز به این خدمات یا ویژه گی داشته باشید آن را صدا میزند !

برای به تاخیر انداختن Provider خود با این متد ٬ خصوصیت defer را برابر با true قرار می دهید و Provider را تعریف می کنید .

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

شمشاد امیری خراسانی

بنیان گذار گروه توسعه وب آریا پاد - توسعه دهنده PHP - لاراول و وردپرس

پست های مرتبط

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *