Laravel'in "sözleşmeleri", çerçeve tarafından sağlanan temel hizmetleri tanımlayan bir dizi arayüzdür. Örneğin, IlluminateContractsQueueQueue sözleşmesi, işleri sıraya koymak için gereken yöntemleri tanımlarken, IlluminateContractsMailMailer sözleşmesi e-posta göndermek için gereken yöntemleri tanımlar. Her sözleşmenin framework tarafından sağlanan karşılık gelen bir uygulaması vardır. Örneğin, Laravel çeşitli sürücülere sahip bir kuyruk uygulaması ve Symfony Mailer tarafından desteklenen bir postacı uygulaması sağlar. Tüm Laravel sözleşmeleri kendi GitHub depolarında bulunur. Bu, tüm mevcut sözleşmeler için hızlı bir referans noktası ve Laravel hizmetleriyle etkileşim kuran paketler oluştururken kullanılabilecek tek, ayrıştırılmış bir paket sağlar.

Sözleşmeler ve Cepheler

Laravel'in cepheleri ve yardımcı fonksiyonları, Laravel'in hizmetlerinden yararlanmanın basit bir yolunu, tür ipucu ve hizmet konteynerinin dışında sözleşmeleri çözmeye gerek kalmadan sağlar. Çoğu durumda, her cephenin eşdeğer bir sözleşmesi vardır. Sınıfınızın kurucusunda bunları gerektirmenizi gerektirmeyen cephelerin aksine, sözleşmeler sınıflarınız için açık bağımlılıklar tanımlamanıza izin verir. Bazı geliştiriciler bağımlılıklarını bu şekilde açıkça tanımlamayı tercih eder ve bu nedenle sözleşmeleri kullanmayı tercih ederken, diğer geliştiriciler cephelerin rahatlığından yararlanır. Genel olarak, çoğu uygulama geliştirme sırasında cepheleri sorunsuz bir şekilde kullanabilir.

Sözleşmeler Ne Zaman Kullanılır?

Sözleşmeleri veya cepheleri kullanma kararı kişisel zevke ve geliştirme ekibinizin zevkine bağlı olacaktır. Hem sözleşmeler hem de cepheler sağlam, iyi test edilmiş Laravel uygulamaları oluşturmak için kullanılabilir. Sözleşmeler ve cepheler birbirini dışlamaz. Uygulamalarınızın bazı kısımları cepheleri kullanırken diğerleri sözleşmelere bağlı olabilir. Sınıfınızın sorumluluklarını odakladığınız sürece, sözleşmeleri ve cepheleri kullanmak arasında çok az pratik fark göreceksiniz. Genel olarak, çoğu uygulama geliştirme sırasında sorunsuz bir şekilde cepheleri kullanabilir. Birden fazla PHP framework'üyle entegre olan bir paket oluşturuyorsanız, paketinizin composer.json dosyasında Laravel'in somut uygulamalarına ihtiyaç duymadan Laravel'in hizmetleriyle entegrasyonunuzu tanımlamak için illuminate/contracts paketini kullanmak isteyebilirsiniz.

Sözleşmeler Nasıl Kullanılır

Peki, bir sözleşmenin uygulanmasını nasıl elde edersiniz? Aslında oldukça basittir. Laravel'deki birçok sınıf türü, denetleyiciler, olay dinleyicileri, ara yazılım, sıraya alınmış işler ve hatta rota kapanışları dahil olmak üzere servis konteyneri aracılığıyla çözülür. Bu nedenle, bir sözleşmenin uygulamasını elde etmek için, çözülen sınıfın kurucusunda arayüzü "tip ipucu" olarak verebilirsiniz. Örneğin, şu olay dinleyicisine bir göz atın:

<?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
    {
        // ...
    }
}
Olay dinleyicisi çözümlendiğinde, servis konteyneri sınıfın kurucusundaki tür ipuçlarını okuyacak ve uygun değeri enjekte edecektir. Servis konteynerinde şeyleri kaydetme hakkında daha fazla bilgi edinmek için belgelerine bakın.