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.