قراردادها
معرفی
"قراردادهای" لاراول مجموعه ای از رابط ها هستند که خدمات اصلی ارائه شده توسط فریم ورک را تعریف می کنند. به عنوان مثال، یک
Illuminate\Contracts\Queue\Queue
قرارداد روش های مورد نیاز برای صف بندی مشاغل را تعریف می کند، در حالی که
Illuminate\Contracts\Mail\Mailer
قرارداد روش های مورد نیاز برای ارسال ایمیل را تعریف می کند.
هر قرارداد دارای یک اجرای متناظر است که توسط چارچوب ارائه شده است. به عنوان مثال، لاراول یک اجرای صف با انواع درایورها و یک پیاده سازی پستی که توسط Symfony Mailer ارائه می شود، ارائه می دهد .
همه قراردادهای لاراول در مخزن GitHub خود زندگی می کنند . این یک نقطه مرجع سریع برای همه قراردادهای موجود، و همچنین یک بسته مجزا و منفرد است که ممکن است هنگام ساخت بستههایی که با خدمات لاراول تعامل دارند، استفاده شود.
قراردادها در مقابل نما
نماهای لاراول و توابع کمکی راه ساده ای برای استفاده از خدمات لاراول بدون نیاز به تایپ کردن و حل قراردادهای خارج از کانتینر خدمات ارائه می دهند. در بیشتر موارد، هر نما دارای قراردادی معادل است.
برخلاف نماها، که نیازی به نیاز به آنها در سازنده کلاس خود ندارند، قراردادها به شما امکان می دهند وابستگی های صریح را برای کلاس های خود تعریف کنید. برخی از توسعه دهندگان ترجیح می دهند وابستگی های خود را به این شکل به صراحت تعریف کنند و بنابراین ترجیح می دهند از قرارداد استفاده کنند، در حالی که توسعه دهندگان دیگر از راحتی نماها لذت می برند. به طور کلی، اکثر برنامه ها می توانند از نماها بدون مشکل در طول توسعه استفاده کنند.
زمان استفاده از قراردادها
تصمیم به استفاده از قراردادها یا نماها به سلیقه شخصی و سلیقه تیم توسعه شما بستگی دارد. هم قراردادها و هم نماها را می توان برای ایجاد برنامه های لاراول قوی و آزمایش شده استفاده کرد. قراردادها و نماها متقابل نیستند. برخی از قسمت های برنامه های شما ممکن است از نما استفاده کنند در حالی که برخی دیگر به قراردادها بستگی دارند. تا زمانی که مسئولیت های کلاس خود را متمرکز نگه دارید، تفاوت های عملی بسیار کمی بین استفاده از قراردادها و نماها مشاهده خواهید کرد.
به طور کلی، اکثر برنامه ها می توانند از نماها بدون مشکل در طول توسعه استفاده کنند. اگر در حال ساخت بسته ای هستید که با چندین فریم ورک PHP ادغام می شود، ممکن است بخواهید از
illuminate/contracts
بسته برای تعریف ادغام خود با سرویس های لاراول بدون نیاز به پیاده سازی های ملموس لاراول در
composer.json
فایل بسته خود استفاده کنید.
نحوه استفاده از قراردادها
بنابراین، چگونه می توانید یک قرارداد را اجرا کنید؟ در واقع بسیار ساده است.
بسیاری از انواع کلاسها در لاراول از طریق کانتینر سرویس حل میشوند ، از جمله کنترلکنندهها، شنوندگان رویداد، میانافزار، مشاغل در صف و حتی بسته شدن مسیرها. بنابراین، برای اجرای یک قرارداد، فقط میتوانید رابط را در سازنده کلاسی که در حال حل شدن است، «تایپ-اشاره کنید».
به عنوان مثال، به این شنونده رویداد نگاهی بیندازید:
<?php namespace App\Listeners; use App\Events\OrderWasPlaced;use App\Models\User;use Illuminate\Contracts\Redis\Factory; class CacheOrderInformation{ /** * Create a new event handler instance. */ public function __construct( protected Factory $redis, ) {} /** * Handle the event. */ public function handle(OrderWasPlaced $event): void { // ... }}
هنگامی که شنونده رویداد حل شد، کانتینر سرویس نکات نوع مربوط به سازنده کلاس را می خواند و مقدار مناسب را تزریق می کند. برای کسب اطلاعات بیشتر در مورد ثبت موارد در کانتینر سرویس، اسناد آن را بررسی کنید .
مرجع قرارداد
این جدول یک اشاره سریع به تمام قراردادهای لاراول و نماهای معادل آنها ارائه می دهد: