
Bu yazıda, Laravel web çerçevesindeki bildirim sistemini keşfedeceğiz. Laravel’deki bildirim sistemi, kullanıcılara farklı kanallar üzerinden bildirim göndermenizi sağlar. Bugün, posta kanalı üzerinden nasıl bildirim gönderebileceğinizi tartışacağız.
Bildirimlerin Temelleri
Uygulama geliştirme sırasında, kullanıcıları farklı durum değişiklikleri hakkında sık sık bilgilendirmeniz gerekir. Bu, sipariş durumu değiştiğinde e-posta bildirimleri göndermek veya güvenlik amacıyla giriş faaliyetleri hakkında bir SMS göndermek olabilir. Özellikle, kısa olan ve yalnızca durum değişikliklerine ilişkin fikir veren mesajlardan bahsediyoruz.
Laravel, benzer bir şeye ulaşmamıza yardımcı olan yerleşik bir özellik zaten sağlıyor: bildirimler. Aslında, kullanıcılara bildirim mesajları göndermeyi çok kolay ve eğlenceli bir deneyim haline getiriyor!
Bu yaklaşımın güzelliği, bildirimlerin gönderileceği farklı kanallar arasından seçim yapmanıza izin vermesidir. Laravel tarafından desteklenen farklı bildirim kanallarından hızlıca geçelim.
- Posta: Bildirimler, kullanıcılara e-posta şeklinde gönderilecektir.
- SMS: Adından da anlaşılacağı gibi, kullanıcılar telefonlarına SMS bildirimleri alacaklar.
- Gevşek: Bu durumda bildirimler Slack kanallarından gönderilecektir.
- Veri tabanı: Bu seçenek, onu görüntülemek için özel bir kullanıcı arabirimi oluşturmak istemeniz durumunda bildirimleri bir veritabanında saklamanıza olanak tanır.
Farklı bildirim kanalları arasında, mail
Bu eğitim boyunca geliştireceğimiz örnek kullanım durumumuzdaki kanal.
Aslında, uygulamamızın kullanıcılarının her kullanıcıya mesaj göndermesine izin veren oldukça basit bir kullanım durumu olacaktır. Kullanıcılar gelen kutularına yeni bir mesaj aldıklarında, onlara bir e-posta göndererek bu olay hakkında onları bilgilendireceğiz. Tabi bunu Laravel’in bildirim özelliğini kullanarak yapacağız!
Özel Bildirim Sınıfı Oluşturun
Daha önce tartıştığımız gibi, uygulamamızın kullanıcılarının birbirlerine mesaj göndermelerini sağlayan bir uygulama kuracağız. Öte yandan, diğer kullanıcılardan e-posta yoluyla yeni bir mesaj aldıklarında kullanıcıları bilgilendireceğiz.
Bu bölümde, aradığımız kullanım senaryosunu uygulamak için gerekli olan dosyaları oluşturacağız.
oluştur Message
modeli
Başlamak için, hadi oluşturalım Message
kullanıcıların birbirlerine gönderdiği mesajları tutan model.
$php artisan make:model Message --migration
Ayrıca aşağıdaki gibi birkaç alan eklememiz gerekiyor. to
, from
ve message
için messages
masa. Öyleyse, çalıştırmadan önce taşıma dosyasını değiştirelim. migrate
komuta veritabanı/taşıma/XXXX_XX_XX_XXXXXX_create_messages_table.php.
<?php use IlluminateDatabaseMigrationsMigration; use IlluminateDatabaseSchemaBlueprint; use IlluminateSupportFacadesSchema; class CreateMessagesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('messages', function (Blueprint $table) { $table->increments('id'); $table->integer('from', FALSE, TRUE); $table->integer('to', FALSE, TRUE); $table->text('message'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('messages'); } }
Şimdi, aşağıdakileri oluşturan move komutunu çalıştıralım. messages
veritabanındaki tablo.
$php artisan migrate
Bu oluşturmalı messages
veritabanındaki tablo.
Ayrıca, kayıt ve oturum açma gibi özelliklerin kutudan çıktığı gibi çalışması için önce varsayılan Laravel kimlik doğrulama sistemini etkinleştirdiğinizden emin olun. Bunu nasıl yapacağınızdan emin değilseniz, Laravel belgeler sana nasıl olduğunu söyleyecek.
oluştur NewMessage
Bildirim Sınıfı
Laravel’de her bildirim ayrı bir sınıf tarafından temsil edildiğinden, kullanıcıları bilgilendirmek için kullanılacak özel bir bildirim sınıfı oluşturmamız gerekiyor. Özel bir bildirim sınıfı oluşturmak için aşağıdaki artisan komutunu kullanalım: NewMessage
.
$php artisan make:notification NewMessage
Bu oluşturmalı app/Bildirimler/NewMessage.php class, öyleyse o dosyanın içeriğini aşağıdaki içeriklerle değiştirelim.
<?php namespace AppNotifications; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateNotificationsMessagesMailMessage; use IlluminateNotificationsNotification; class NewMessage extends Notification { use Queueable; /** * Create a new notification instance. * * @return void */ public function __construct() { // } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['mail']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return IlluminateNotificationsMessagesMailMessage */ public function toMail($notifiable) { return (new MailMessage) ->line('The introduction to the notification.') ->action('Notification Action', url('/')) ->line('Thank you for using our application!'); } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ // ]; } }
kullanacağımıza göre mail
kullanıcılara bildirim göndermek için kanal, via
yöntemi buna göre yapılandırılır. Dolayısıyla bu yöntem, bir bildirimin kanal türünü yapılandırmanıza olanak tanır.
Sonra, orada toMail
çeşitli e-posta parametrelerini yapılandırmanıza izin veren yöntem. Aslında, toMail
yöntem örneğini döndürmelidir IlluminateNotificationsMessagesMailMessage
ve e-posta parametrelerini yapılandırmanıza izin veren kullanışlı yöntemler sağlar.
Çeşitli yöntemler arasında, line
yöntemi, bir mesaja tek bir satır eklemenizi sağlar. Öte yandan, orada action
bir mesaja bir harekete geçirici mesaj düğmesi eklemenizi sağlayan yöntem.
Bu şekilde kullanıcılara gönderilecek bir mesajı biçimlendirebilirsiniz. Bu nedenle, bildirim sınıfını kullanırken bildirim sınıfını bu şekilde yapılandırmanız gerekir. mail
Bildirim göndermek için kanal.
Son olarak, programda konfigüre edilen kanal tipine göre gerekli yöntemleri uyguladığınızdan emin olmanız gerekmektedir. via
yöntem. Örneğin, kullanıyorsanız database
bildirimleri bir veritabanında saklayan kanal, yapılandırmanıza gerek yoktur. toMail
yöntem; bunun yerine, uygulamalısınız toArray
Bir veritabanında saklanması gereken verileri biçimlendiren yöntem.
Bildirimler Nasıl Gönderilir
Bir önceki bölümde bildirim göndermeye hazır bir bildirim sınıfı oluşturduk. Bu bölümde, bildirimleri kullanarak gerçekte nasıl bildirim gönderebileceğinizi gösteren dosyalar oluşturacağız. NewMessage
bildirim sınıfı.
adresinde bir controller dosyası oluşturalım. app/Http/Controllers/NotificationController.php aşağıdaki içeriklerle.
<?php namespace AppHttpControllers; use AppHttpControllersController; use AppMessage; use AppUser; use AppNotificationsNewMessage; use IlluminateSupportFacadesNotification; class NotificationController extends Controller { public function __construct() { $this->middleware('auth'); } public function index() { // user 2 sends a message to user 1 $message = new Message; $message->setAttribute('from', 2); $message->setAttribute('to', 1); $message->setAttribute('message', 'Demo message from user 2 to user 1.'); $message->save(); $fromUser = User::find(2); $toUser = User::find(1); // send notification using the "user" model, when the user receives new message $toUser->notify(new NewMessage($fromUser)); // send notification using the "Notification" facade Notification::send($toUser, new NewMessage($fromUser)); } }
Tabii ki, ilgili bir rota eklemeniz gerekir. rotalar/web.php dosya.
Route::get('notify/index', 'NotificationController@index');
Laravel’in bildirim göndermenize izin vermesinin iki yolu vardır: ya bildirilebilir varlığı ya da Notification
cephe.
varlık modeli sınıfı kullanıyorsa IlluminateNotificationsNotifiable
özellik, o zaman arayabilirsin notify
Bu modeldeki yöntem. bu AppUser
sınıf uygular Notifiable
özelliktir ve böylece bildirimi zorunlu varlık haline gelir. Öte yandan, şunları da kullanabilirsiniz: IlluminateSupportFacadesNotification
Kullanıcılara bildirim göndermek için cephe.
geçelim index
denetleyici yöntemi.
Bizim durumumuzda, yeni bir mesaj aldıklarında kullanıcıları bilgilendireceğiz. Böylece, bu davranışı taklit etmeye çalıştık. index
yöntemi ilk etapta.
Ardından, alıcı kullanıcıyı yeni bir mesaj hakkında bilgilendirdik. notify
üzerindeki yöntem $toUser
nesne, olduğu gibi bildirilebilir varlık.
$toUser->notify(new NewMessage($fromUser));
geçtiğini de fark etmişsinizdir. $fromUser
nesnenin ilk argümanında __construct
yöntemini dahil etmek istediğimiz için itibaren kullanıcı adı bir mesajda.
Öte yandan, onu taklit etmek istiyorsanız, Notification
cephe, aşağıdaki pasajı kullanarak bunu yapmak oldukça kolaydır.
Notification::send($toUser, new NewMessage($fromUser));
Gördüğünüz gibi, kullandık send
Bir kullanıcıya bildirim göndermek için Bildirim cephesinin yöntemi.
Devam edin ve URL’yi açın https://your-laravel-site-domain/notify/index tarayıcınızda. Henüz giriş yapmadıysanız, giriş ekranına yönlendirileceksiniz. Giriş yaptıktan sonra, kullanıcıyla birlikte verilen e-posta adresine bir bildirim e-postası almalısınız. 1
.
Bildirim sisteminin bildirimleri nasıl algıladığını merak ediyor olabilirsiniz. to
henüz hiçbir yerde yapılandırmadığımızda adres. Bu durumda, bildirim sistemi aşağıdakileri bulmaya çalışır: email
Bildirilebilir nesnedeki özellik. Ve AppUser
Varsayılan Laravel kimlik doğrulama sistemini kullandığımızdan, nesne sınıfı zaten bu özelliğe sahiptir.
Ancak, bu davranışı geçersiz kılmak ve e-posta dışında farklı bir özellik kullanmak istiyorsanız, bildirim sınıfınızda aşağıdaki yöntemi tanımlamanız yeterlidir.
public function routeNotificationForMail() { return $this->email_address; }
Şimdi, bildirim sistemi şunları aramalı: email_address
mülkün yerine email
almak için mülk to
adres.
Ve Laravel’deki bildirim sistemi bu şekilde kullanılır. Bu da bizi bu makalenin sonuna getiriyor!
Çözüm
Bugün yaşadıklarımız, Laravel’deki en kullanışlı ancak en az tartışılan özelliklerden biri olan bildirimlerdir. Kullanıcılara farklı kanallar üzerinden bildirim göndermenizi sağlar.
Hızlı bir girişten sonra, posta kanalı üzerinden bildirimlerin nasıl gönderileceğini gösteren gerçek dünyadan bir örnek uyguladık. Aslında, uygulamanızdaki durum değişiklikleri hakkında kısa mesajlar göndermeniz durumunda gerçekten kullanışlıdır.
Laravel’e yeni başlayanlar veya bilginizi, sitenizi veya uygulamanızı uzantılarla genişletmek isteyenler için, üzerinde çalışabileceğiniz çeşitli şeylerimiz var. Envato Pazarı.