Notifications başta basit görünebilir, fakat uygulamanız büyüdüğünde ihtiyaçlarınız oldukça artar. Başlangıçta bir controller’dan hızlıca e-posta göndermeye başlarsınız, ama zamanla daha fazlasını istersiniz:
- E-posta ve uygulama içi bildirimler.
- Kullanıcı tercihine göre farklı kanallar.
- UI’nın hızlı kalmasını sağlamak için queued delivery.
- SMTP sunucunuza hitap etmeyen temiz testler.
İşte burada Laravel Notifications devreye giriyor. Tek bir sınıf kullanarak birden fazla kanalda kısa, olay odaklı mesajlar göndermeniz için yapılandırılmış bir yol sunuyorlar.
Laravel, Sipariş gönderildi, Fatura ödendi, Yeni yorum, Şifre değiştirildi gibi kısa, olay odaklı mesajları birden fazla kanalda kolayca göndermenize olanak tanır.
Bu makalede, gerçek projelerde yeniden kullanabileceğiniz pratik bir yapılandırmayı göstereceğim.
<hr/>
<h2>
<a name="why-use-notifications-instead-of-sending-mail-directly-" href="#why-use-notifications-instead-of-sending-mail-directly-">
</a>
Neden direkt olarak e-posta göndermek yerine Notifications kullanmalısınız?
</h2>
<p>Her yerde <code>Mail::to()->send()</code> çağrısı yapmanız mümkünken, notifications daha iyi bir mimari sunar:</p>
<ul>
<li> <strong>Merkezi mantık</strong>: Kanalları <code>via()</code> metodu ile tek bir yerde tanımlarsınız.</li>
<li> <strong>Çoklu kanal desteği</strong>: Mail, veritabanı, Slack ve SMS arasında kolayca geçiş yapabilir veya bunları birleştirebilirsiniz.</li>
<li> <strong>Otomatik Kuşaklar</strong>: Arka planda işlem için yerel destek.</li>
<li> <strong>Gözlemlenebilirlik</strong>: <code>Notification::fake()</code> ile test desteği.</li>
</ul>
<p>Bu durum, uygulamanızın evrildiği durumlarda kodunuzu daha kolay bakım yapılabilir hale getirir.</p>
<hr/>
<h2>
<a name="a-real-example-order-shipped" href="#a-real-example-order-shipped">
</a>
Gerçek bir örnek: Sipariş gönderildi
</h2>
<p>Diyelim ki, bir e-ticaret uygulamanız var ve bir sipariş gönderildiğinde kullanıcınıza bildirim göndermek istiyorsunuz.</p>
<p>Aşağıdaki bildirimleri göndereceğiz:</p>
<ul>
<li>bir <strong>e-posta bildirimi</strong></li>
<li>veritabanında saklanan bir <strong>uygulama içi bildirim</strong></li>
</ul>
<hr/>
<h2>
<a name="step-1-generate-a-notification" href="#step-1-generate-a-notification">
</a>
Adım 1: Bir bildirim oluşturun
</h2>
<div class="highlight js-code-highlight">
<pre class="highlight shell"><code>php artisan make:notification OrderShipped<p>Laravel, <code>app/Notifications/OrderShipped.php</code> dosyasında bir sınıf oluşturur.</p>
<hr/>
<h2>
<a name="step-2-build-the-notification-class" href="#step-2-build-the-notification-class">
</a>
Adım 2: Bildirim sınıfını oluşturun
</h2>
<p>İşte pratik bir versiyonu:<br/></p>
<div class="highlight js-code-highlight">
<pre class="highlight php"><code><?php namespace App\Notifications;
use App\Models\Order;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Notifications\Notification;
class OrderShipped extends Notification implements ShouldQueue
{
use Queueable;
public function __construct(public Order $order)
{
}
/
* Hangi kanalların kullanılacağına karar verin.
*/
public function via(object $notifiable): array
{
return ['mail', 'database'];
}
/
* E-posta versiyonu.
*/
public function toMail(object $notifiable): MailMessage
{
return (new MailMessage)
->subject('Siparişiniz gönderildi')
->greeting('Merhaba ' . $notifiable->name . ' 👋')
->line("İyi haber! Siparişiniz #{$this->order->id} gönderildi.")
->action('Siparişimi takip et', url("/orders/{$this->order->id}"))
->line('Alışverişiniz için teşekkür ederiz.');
}
/
* Veritabanı versiyonu (notifications tablosuna JSON olarak saklanır).
*/
public function toArray(object $notifiable): array
{
return [
'order_id' => $this->order->id,
'status' => 'shipped',
'message' => "Siparişiniz #{$this->order->id} gönderildi.",
'url' => "/orders/{$this->order->id}",
];
}}


