Sistem Notifikasi Laravel adalah cara luar biasa untuk memberi tahu pengguna melalui email atau SMS. Namun fitur yang kurang dikenal adalah driver notifikasi yang disebut “database”, yang memungkinkan penyimpanan pesan di dalam DB aplikasi, dan kemudian menampilkannya di dalam sistem, sebagai peringatan pesan internal. Artikel ini akan menunjukkan caranya.
Ini di atas adalah contoh dari apa yang akan kita buat. Setiap kali pengguna baru mendaftar di sistem, pemberitahuan database akan disimpan untuk semua administrator pengguna. Administrator akan segera melihat notifikasi di dasbor mereka, dan akan dapat menandainya sebagai telah dibaca – satu per satu, atau semuanya.
Proyek demo ini didasarkan pada generator Laravel QuickAdminPanel kami (dan di akhir artikel akan ada tautan ke repositori Github), tetapi kode di bawah ini dapat ditambahkan ke proyek Laravel mana pun.
Langkah 1. Tabel DB Notifikasi
Agar notifikasi berfungsi, kita perlu membuat tabel DB. Jalankan perintah ini:
php artisan notifications:table
Ini akan menghasilkan kelas migrasi. Lalu, yang ini, yang biasa:
php artisan migrate
Berikut strukturnya pemberitahuan meja:
Schema::create('notifications', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->string('type');
$table->morphs('notifiable');
$table->text('data');
$table->timestamp('read_at')->nullable();
$table->timestamps();
});
Seperti yang Anda lihat, ini menggunakan Hubungan Polimorfik, dan bidang uuid sebagai kunci utama. Selain itu, bidang “data” akan menjadi tempat menyimpan semua informasi notifikasi, mari kita buat itu.
Langkah 2. Kelas Notifikasi
php artisan make:notification NewUserNotification
Lalu, di file baru aplikasi/Pemberitahuan/NewUserNotification.php:
class NewUserNotification extends Notification
{
public function __construct($user)
{
$this->user = $user;
}
public function via($notifiable)
{
return ['database'];
}
public function toArray($notifiable)
{
return [
'name' => $this->user->name,
'email' => $this->user->email,
];
}
}
Tiga hal di sini:
– Kami memasukkan pengguna ke dalam Konstruktor, untuk mengetahui pengguna mana yang terdaftar;
– Kami menentukan basis data sebagai saluran notifikasi, di melalui() metode;
– Kami membentuk array data untuk notifikasi, in keArray() metode – Anda bebas memasukkan data apa pun yang Anda inginkan di sana.
Sebentar lagi, saya akan menunjukkan cara kerjanya, beberapa langkah lagi.
Langkah 3. Memanggil Notifikasi
Mirip dengan artikel lain Laravel: Registrasi Pengguna Baru – Contoh Seed Data “Dummy”, yang akan kami gunakan Terdaftar() acara dan buat kelas Pendengar untuk itu.
php artisan make:listener SendNewUserNotification
Lalu, di file baru app/Listeners/SendNewUserNotification.php:
class SendNewUserNotification
{
public function handle($event)
{
$admins = User::whereHas('roles', function ($query) {
$query->where('id', 1);
})->get();
Notification::send($admins, new NewUserNotification($event->user));
}
}
Dengan kata lain, kami mengirimkan notifikasi dari langkah sebelumnya, ke semua pengguna dengan ID Peran 1 (administrator, dalam kasus kami).
Perhatikan parameternya $acara->pengguna – bahwa itu adalah pengguna terdaftar baru.
Untuk benar-benar “mengaktifkan” peristiwa itu, kita perlu menambahkan ini ke dalamnya app/Penyedia/EventServiceProvider.php:
use App\Listeners\SendNewUserNotification;
// ...
class EventServiceProvider extends ServiceProvider
{
protected $listen = [
Registered::class => [
SendEmailVerificationNotification::class,
SendNewUserNotification::class,
],
];
// ...
}
Sekarang, setiap registrasi baru, notifikasi akan disimpan ke database. Seperti ini:

Langkah 4. Menampilkan Notifikasi kepada Administrator
Sebagai beranda, kami memiliki yang sederhana Pengontrol Rumah dengan indeks() metode:
class HomeController
{
public function index()
{
$notifications = auth()->user()->unreadNotifications;
return view('home', compact('notifications'));
}
}
Lihat betapa mudahnya menyampaikan notifikasi kepada pengguna tertentu?
$notifications = auth()->user()->unreadNotifications;
Dan Anda dapat menampilkannya di Blade sesuka Anda, di Blade kami sumber daya/tampilan/home.blade.php kami punya ini:
@if(auth()->user()->is_admin)
@forelse($notifications as $notification)
<div class="alert alert-success" role="alert">
[{{ $notification->created_at }}] User {{ $notification->data['name'] }} ({{ $notification->data['email'] }}) has just registered.
<a href="#" class="float-right mark-as-read" data-id="{{ $notification->id }}">
Mark as read
</a>
</div>
@if($loop->last)
<a href="#" id="mark-all">
Mark all as read
</a>
@endif
@empty
There are no new notifications
@endforelse
@endif
Lihat itu auth->pengguna->is_admin? Itu adalah atribut model di aplikasi/Pengguna.php:
class User extends Authenticatable
{
// ...
public function roles()
{
return $this->belongsToMany(Role::class);
}
public function getIsAdminAttribute()
{
return $this->roles()->where('id', 1)->exists();
}
}
Begini tampilannya:

Langkah 5. Tandai Notifikasi sebagai Telah Dibaca
Perhatikan bahwa dalam kode di atas kita punya Notifikasi yang belum dibaca sebagai properti? Bagaimana mereka mendefinisikan jika sudah dibaca?
Berdasarkan kolom database notifikasi.read_at yang secara default adalah NULL, atau akan berisi stempel waktu jika dibaca.

Nah, untuk menandai notifikasi sebagai sudah dibaca, kita cukup mengisi kolom tersebut saja. Kita akan melakukannya melalui panggilan AJAX dari dashboard, tapi pertama-tama mari kita tentukan rute dan pengontrolnya.
rute/web.php:
// This should be under 'auth' middleware group
Route::post('/mark-as-read', 'HomeController@markNotification')->name('markNotification');
Dan kemudian metodenya sendiri:
public function markNotification(Request $request)
{
auth()->user()
->unreadNotifications
->when($request->input('id'), function ($query) use ($request) {
return $query->where('id', $request->input('id'));
})
->markAsRead();
return response()->noContent();
}
Jadi kami memprosesnya juga pengenal pemberitahuan tertentu, atau semuanya secara bersamaan.
Seperti yang Anda lihat, kita tidak perlu berinteraksi baca_di kolom langsung, kita hanya perlu menelepon bahan makanan () metode!
Dan, kami menyebut rute ini melalui AJAX, jadi di kami sumber daya/tampilan/home.blade.php kami memiliki kode jQuery ini:
@if(auth()->user()->is_admin)
<script>
function sendMarkRequest(id = null) {
return $.ajax("{{ route('admin.markNotification') }}", {
method: 'POST',
data: {
_token,
id
}
});
}
$(function() {
$('.mark-as-read').click(function() {
let request = sendMarkRequest($(this).data('id'));
request.done(() => {
$(this).parents('div.alert').remove();
});
});
$('#mark-all').click(function() {
let request = sendMarkRequest();
request.done(() => {
$('div.alert').remove();
})
});
});
</script>
@endif
Itu saja!
Repositori Github: LaravelDaily/Laravel-Notifications-Database
News
Berita
News Flash
Blog
Technology
Sports
Sport
Football
Tips
Finance
Berita Terkini
Berita Terbaru
Berita Kekinian
News
Berita Terkini
Olahraga
Pasang Internet Myrepublic
Jasa Import China
Jasa Import Door to Door
Gaming center adalah sebuah tempat atau fasilitas yang menyediakan berbagai perangkat dan layanan untuk bermain video game, baik di PC, konsol, maupun mesin arcade. Gaming center ini bisa dikunjungi oleh siapa saja yang ingin bermain game secara individu atau bersama teman-teman. Beberapa gaming center juga sering digunakan sebagai lokasi turnamen game atau esports.
Comments are closed, but trackbacks and pingbacks are open.