Framework Laravel memiliki sistem notifikasi hebat yang dapat digunakan untuk mengirim email, pesan SMS, atau jenis notifikasi lainnya kepada pengguna. Namun ada cara populer lainnya untuk memberi tahu pengguna – intisari harian tentang peristiwa pada hari itu. Pada artikel ini, saya akan menunjukkan proyek demo dengan keduanya.
Kode proyek lengkap tersedia di Github, tautannya ada di akhir artikel.
Proyek Demo: Berlangganan Postingan Pekerjaan berdasarkan Tag
Skenario yang cukup realistis – proyek papan pekerjaan di mana calon karyawan/pekerja lepas dapat berlangganan pekerjaan baru berdasarkan label industri mereka, dan akan diberi tahu melalui email.
Untuk menjadikan notifikasi bersifat pribadi, kami menambahkan dua kolom baru ke formulir pendaftaran khas Laravel:
Dalam hal database, ada dua struktur baru di atas Laravel default:
- Kolom pengguna.notifikasi_frekuensi (varchar dengan nilai “segera” atau “sekali”)
- Meja keterampilan dan tabel pivot keterampilan_pengguna dengan kolom keterampilan_id Dan user_id
Pemberitahuan Segera: Saat Admin Memposting Pekerjaan Baru
Berikut formulir dimana administrator dapat memasang iklan lowongan kerja baru:

Ketika formulir itu diisi, Pengontrol menyimpan datanya – ini dia app/Http/Controllers/Admin/JobsController.php:
public function store(StoreJobRequest $request)
{
$job = Job::create($request->all());
return redirect()->route('admin.jobs.index');
}
Yang penting bagi kami adalah bidang “Keterampilan” – yang akan menentukan siapa yang akan diberi tahu.
Notifikasi diaktifkan dengan kelas Eloquent Observer – app/Observer/JobObserver.php:
use App\Job;
use App\Notifications\NewJobImmediateNotification;
use App\User;
use Notification;
class JobObserver
{
public function created(Job $job)
{
$job->skills()->sync(request()->input('skills', []));
$skills = $job->skills->pluck('id');
$users = User::where('notifications_frequency', 'immediately')
->whereHas('skills', function ($query) use ($skills) {
$query->whereIn('id', $skills);
})->get();
Notification::send($users, new NewJobImmediateNotification($job));
}
}
Anda dapat membaca lebih lanjut tentang Eloquent Observers di sini di dokumentasi resmi, pada dasarnya ini adalah kelas sederhana yang menjalankan metodenya secara otomatis setiap kali Eloquent Model dibuat/diperbarui/dihapus, dll.
Untuk mendaftarkan pengamat dengan Model tertentu, kita perlu menambahkan potongan kode ini app/Job.php:
use App\Observers\JobObserver;
class Job extends Model
{
public static function boot()
{
parent::boot();
self::observe(new JobObserver);
}
}
Sekarang, apa yang terjadi di dalam metode JobObserver tersebut dibuat()? Mari kita ulangi:
$job->skills()->sync(request()->input('skills', []));
$skills = $job->skills->pluck('id');
$users = User::where('notifications_frequency', 'immediately')
->whereHas('skills', function ($query) use ($skills) {
$query->whereIn('id', $skills);
})->get();
Notification::send($users, new NewJobImmediateNotification($job));
Jadi:
- Keterampilan kerja disimpan dalam tabel pivot;
- Kami mendapatkan ID keterampilan tersebut dan menanyakan pengguna yang berlangganan tag tersebut dengan pemberitahuan “langsung”;
- Kami mengirimkan pemberitahuan kepada mereka semua.
Sekarang, apa yang ada di dalamnya app/Notifications/NewJobImmediateNotification.php?
class NewJobImmediateNotification extends Notification
{
public function __construct($job)
{
$this->job = $job;
}
public function toMail($notifiable)
{
return (new MailMessage)
->subject('New job has been posted')
->line('A new job listing has been posted: '.$this->job->title)
->line('Skills: '.$this->job->skills->implode('name', ', '))
->line('Description: '.$this->job->description)
->line('Contact email: '.$this->job->contact_email)
->action('View job', route('admin.jobs.show', $this->job->id))
->line('Thank you for using our application!');
}
}
Seperti yang Anda lihat, kami lewat $pekerjaan sebagai parameter untuk kelas ini, jadi kita perlu mengubahnya menjadi variabel pribadi __membangun() metode. Lalu, semuanya hanya membentuk email notifikasi baris demi baris.
Berikut email yang diterima:

Intisari Harian: Pekerjaan Baru Hari Ini
Seperti yang saya sebutkan, mengirim email intisari harian/mingguan dengan kejadian baru di sistem cukup populer, sebagian untuk menyelamatkan pengguna dari “spam” email setiap saat.
Untuk mencapainya, kami membuat perintah Artisan yang akan dipanggil seperti ini: pekerjaan tukang php: intisari.
Ini milik kami app/Console/Commands/SendDailyJobsEmails.php:
use App\Job;
use App\Notifications\NewJobsDailyNotification;
use App\User;
use Illuminate\Console\Command;
class SendDailyJobsEmails extends Command
{
protected $signature="jobs:digest";
protected $description = 'Send daily emails to users with list of new jobs';
public function handle()
{
$jobs = Job::with('skills')
->whereHas('skills')
->whereBetween('created_at', [now()->subDay(), now()])
->get();
$users = User::with('skills')
->where('notifications_frequency', 'once')
->get();
foreach($users as $user)
{
$userSkills = $user->skills;
$userJobs = $jobs->filter(function ($job) use ($userSkills) {
return $job->skills->contains(function($key, $value) use($userSkills) {
return $userSkills->contains($value);
});
});
if($userJobs->count())
{
$user->notify(new NewJobsDailyNotification($userJobs));
}
}
}
}
Kode ini cukup jelas, dengan beberapa pemfilteran Koleksi digunakan.
Mari kita lihat aplikasi/Pemberitahuan/NewJobsDailyNotification.php:
class NewJobsDailyNotification extends Notification
{
public function __construct($jobs)
{
$this->jobs = $jobs;
}
public function toMail($notifiable)
{
return (new MailMessage)->markdown('mail.jobs', ['jobs' => $this->jobs]);
}
}
Struktur notifikasi ini sedikit lebih rumit, jadi sebaiknya dipisahkan dalam template terpisah. Ini dia sumber daya/tampilan/mail/jobs.blade.php:
@component('mail::message')
# Hello
There are new jobs for you
@foreach($jobs as $job)
Title: {{ $job->title }}
Skills: {{ $job->skills->implode('name', ', ') }}
Description: {{ $job->description }}
Contact email: {{ $job->contact_email }}
@if(!$loop->last)
* * *
@endif
@endforeach
@component('mail::button', ['url' => route('admin.jobs.index')])
View Jobs
@endcomponent
Thanks,
{{ config('app.name') }}
@endcomponent
Anda dapat membaca tentang sintaks Markdown di sini, baca juga artikel saya Pemberitahuan Laravel Mail: Cara Menyesuaikan Templat.
Hal terakhir – kita perlu menjadwalkan perintah harian ini, kita melakukannya app/Console/Kernel.php:
class Kernel extends ConsoleKernel
{
protected function schedule(Schedule $schedule)
{
$schedule->command('jobs:digest')
->dailyAt('20:00');
}
}
Selesai, setiap malam pengguna akan menerima email seperti ini:

Seperti yang dijanjikan, repositori Github dengan semua proyek: LaravelDaily/Laravel-Notifications-Daily-Immediate
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.