This content originally appeared on DEV Community and was authored by Barış Bideratan
Laravel, servis container yapısıyla dependency injection (bağımlılık enjeksiyonu) kullanımını kolaylaştırır. Ancak bazı durumlarda her servisi container üzerinden almak ya da özel bir Facade sınıfı oluşturmak gereksiz gelebilir. İşte Real-Time Facades bu noktada devreye giriyor.
Kısaca özetlemek gerekirse:
Real-Time Facades, herhangi bir sınıfı veya interface'i, özel bir Facade sınıfı yazmadan Facade gibi kullanmanı sağlar.
Facade Nedir?
Laravel’de Facade, container içindeki bir servise statik gibi görünen bir arabirim sunar.
Örneğin Cache::get() ya da Log::info() çağrıları aslında arka planda container içinden çözümlenir.
Ama her Facade için ayrı bir sınıf yazmak gerekir.
Örneğin App\Facades\MyService gibi.
Real-Time Facades ise bu işi senin yerine yapar.
Normal Kullanım vs Real-Time Facade
Önce klasik bir örnek üzerinden gidelim.
Klasik yöntem:
namespace App\Models;
use App\Services\Publisher;
use Illuminate\Database\Eloquent\Model;
class Podcast extends Model
{
public function publish(Publisher $publisher)
{
$this->update(['published_at' => now()]);
$publisher->publish($this);
}
}
Burada Publisher sınıfını method parametresi olarak alıyoruz.
Gayet güzel ama her çağrıda bu parametreyi geçirmek gerekiyor.
Real-Time Facade ile:
namespace App\Models;
use Facades\App\Services\Publisher;
use Illuminate\Database\Eloquent\Model;
class Podcast extends Model
{
public function publish()
{
$this->update(['published_at' => now()]);
Publisher::publish($this);
}
}
Bak farkı fark ettin mi?
- Artık
Publisherservisini parametre olarak geçmedik. -
use Facades\App\Services\Publisher;yazarak Laravel’e “bu sınıfı facade gibi kullan” dedik. - Yani
Publisher::publish()dediğimizde Laravel container’dan otomatik olarakApp\Services\Publisherörneğini çözüp metodu çalıştırıyor.
Gerçekten “Statik” mi Çalışıyor?
Hayır.
Publisher::publish() statik gibi görünse de aslında container’dan dinamik olarak çözülüyor.
Bu sayede test ederken mock oluşturabiliyorsun:
Publisher::shouldReceive('publish')
->once()
->with($podcast);
Yani hem facade rahatlığını hem test edilebilirliği koruyorsun.
Gerçek Hayattan Bir Örnek
Diyelim ki bir Notifier servisin var:
namespace App\Services;
class Notifier
{
public function sendEmail($to, $subject)
{
// E-posta gönderme işlemi
}
}
Klasik kullanım:
$notifier = app(\App\Services\Notifier::class);
$notifier->sendEmail('test@example.com', 'Merhaba!');
Real-Time Facade ile:
use Facades\App\Services\Notifier;
Notifier::sendEmail('test@example.com', 'Merhaba!');
Tek satırla aynı işi yaptık.
Kod hem okunabilir hem sade.
Ne Zaman Kullanmalı?
Real-Time Facades harika bir kolaylık ama her yerde kullanmak doğru değil.
Kullan:
✅ Basit servis çağrılarında
✅ Model içindeki küçük yardımcı işlemlerde
✅ Hızlı prototip geliştirme aşamalarında
Kullanma:
❌ Büyük veya karmaşık servislerde
❌ Kodun bağımlılıklarını açık görmek istiyorsan
❌ Fazla mock işlemiyle test yazıyorsan
Kısacası, tıpkı kahve gibi:
Azı lezzet, fazlası çarpıntı. ☕
Özet
-
use Facades\ile başlayan bir import yaptığında Laravel otomatik olarak Real-Time Facade oluşturur. - Arka planda container çözümlemesi yapılır, yani dependency injection hâlâ geçerlidir.
- Testlerde
shouldReceive()kullanarak mock oluşturabilirsin. - Kodun sadeleşir ama “nereden geliyor bu servis?” sorusu bazen bulanıklaşabilir.
This content originally appeared on DEV Community and was authored by Barış Bideratan
Barış Bideratan | Sciencx (2025-11-09T11:40:50+00:00) Laravel’de Real-Time Facades Nedir? Nasıl Çalışır?. Retrieved from https://www.scien.cx/2025/11/09/laravelde-real-time-facades-nedir-nasil-calisir/
Please log in to upload a file.
There are no updates yet.
Click the Upload button above to add an update.