نسخه:

قراردادها

معرفی

"قراردادهای" لاراول مجموعه ای از رابط ها هستند که خدمات اصلی ارائه شده توسط فریم ورک را تعریف می کنند. به عنوان مثال، یک 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
{
// ...
}
}

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

مرجع قرارداد

این جدول یک اشاره سریع به تمام قراردادهای لاراول و نماهای معادل آنها ارائه می دهد:

قرارداد مراجع نما
Illuminate\Contracts\Auth\Access\Authorizable   
Illuminate\Contracts\Auth\Access\Gate Gate
Illuminate\Contracts\Auth\Authenticatable   
Illuminate\Contracts\Auth\CanResetPassword  
Illuminate\Contracts\Auth\Factory Auth
Illuminate\Contracts\Auth\Guard Auth::guard()
Illuminate\Contracts\Auth\PasswordBroker Password::broker()
Illuminate\Contracts\Auth\PasswordBrokerFactory Password
Illuminate\Contracts\Auth\StatefulGuard  
Illuminate\Contracts\Auth\SupportsBasicAuth  
Illuminate\Contracts\Auth\UserProvider  
Illuminate\Contracts\Bus\Dispatcher Bus
Illuminate\Contracts\Bus\QueueingDispatcher Bus::dispatchToQueue()
Illuminate\Contracts\Radcasting\Factory Broadcast
Illuminate\Contracts\Broadcasting\Broadcaster Broadcast::connection()
Illuminate\Contracts\Broadcasting\ShouldBroadcast  
Illuminate\Contracts\Broadcasting\ShouldBroadcastNow  
Illuminate\Contracts\Cache\Factory Cache
Illuminate\Contracts\Cache\Lock  
Illuminate\Contracts\Cache\LockProvider  
Illuminate\Contracts\Cache\Repository Cache::driver()
Illuminate\Contracts\Cache\Store  
Illuminate\Contracts\Config\Repository Config
Illuminate\Contracts\Console\Application  
Illuminate\Contracts\Console\Kernel Artisan
Illuminate\Contracts\Container\Container App
Illuminate\Contracts\Cookie\Factory Cookie
Illuminate\Contracts\Cookie\QueueingFactory Cookie::queue()
Illuminate\Contracts\Database\ModelIdentifier  
Illuminate\Contracts\Debug\ExceptionHandler  
Illuminate\Contracts\Encryption\Encrypter Crypt
Illuminate\Contracts\Events\Dispatcher Event
Illuminate\Contracts\Filesystem\Cloud Storage::cloud()
Illuminate\Contracts\Filesystem\Factory Storage
Illuminate\Contracts\Filesystem\Filesystem Storage::disk()
Illuminate\Contracts\Foundation\Application App
Illuminate\Contracts\Hashing\Hasher Hash
Illuminate\Contracts\Http\Kernel  
Illuminate\Contracts\Mail\MailQueue Mail::queue()
Illuminate\Contracts\Mail\Mailable  
Illuminate\Contracts\Mail\Mailer Mail
Illuminate\Contracts\Notifications\Dispatcher Notification
Illuminate\Contracts\Notifications\Factory Notification
Illuminate\Contracts\Pagination\LengthAwarePaginator  
Illuminate\Contracts\Pagination\Paginator  
Illuminate\Contracts\Pipeline\Hub  
Illuminate\Contracts\Pipeline\Pipeline Pipeline ;
Illuminate\Contracts\Queue\EntityResolver  
Illuminate\Contracts\Queue\Factory Queue
Illuminate\Contracts\Queue\Job  
Illuminate\Contracts\Queue\Monitor Queue
Illuminate\Contracts\Queue\Queue Queue::connection()
Illuminate\Contracts\Queue\QueueableCollection  
Illuminate\Contracts\Queue\QueueableEntity  
Illuminate\Contracts\Queue\ShouldQueue  
Illuminate\Contracts\Redis\Factory Redis
Illuminate\Contracts\Routing\BindingRegistrar Route
Illuminate\Contracts\Routing\Registrar Route
Illuminate\Contracts\Routing\ResponseFactory Response
Illuminate\Contracts\Routing\UrlGenerator URL
Illuminate\Contracts\Routing\UrlRoutable  
Illuminate\Contracts\Session\Session Session::driver()
Illuminate\Contracts\Support\Arrayable  
Illuminate\Contracts\Support\Htmlable  
Illuminate\Contracts\Support\Jsonable  
Illuminate\Contracts\Support\MessageBag  
Illuminate\Contracts\Support\MessageProvider  
Illuminate\Contracts\Support\Renderable  
Illuminate\Contracts\Support\Responsible  
Illuminate\Contracts\Translation\Loader  
Illuminate\Contracts\Translation\Mternlator Lang
Illuminate\Contracts\Validation\Factory Validator
Illuminate\Contracts\Validation\ImplicitRule  
Illuminate\Contracts\Validation\Rule  
Illuminate\Contracts\Validation\ValidatesWhenResolved  
Illuminate\Contracts\Validation\Validator Validator::make()
Illuminate\Contracts\View\Engine  
Illuminate\Contracts\View\Factory View
Illuminate\Contracts\View\View View::make()