Laravel - Pengurusan Peristiwa

Hai sana, para ahli Laravel masa depan! Hari ini, kita akan melantikan pengembaraan ke dalam dunia yang penuh sihir pengurusan peristiwa di Laravel. Jangan khawatir jika anda baru dalam bidang programming - saya akan memandu anda dalam perjalanan ini langkah demi langkah, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun pengajaran saya. Jadi, ambil secangkir minuman kesukaan anda, dan mari kita memulakan pengembaraan yang menarik ini bersama!

Laravel - Event Handling

apa Itu Peristiwa di Laravel?

Bayangkan anda di sebuah pesta (pasti pesta kode, kan!). Ketika sesuatu yang penting terjadi - seperti saat kue tiba - semua orang menjadi gembira. Dalam Laravel, peristiwa adalah seperti saat-saat menarik itu dalam aplikasi anda. Mereka adalah kejadian khusus yang aplikasi anda peduli.

Sebagai contoh, saat seorang pengguna mendaftar di website anda, itu adalah peristiwa. Sementara itu, saat sebuah pesanan ditempatkan, itu adalah peristiwa lain. Peristiwa membantu kita untuk menjaga kod kita teratur dan membolehkan bagian-bagian lain aplikasi untuk mereaksi pada saat-saat penting ini.

Mengapa Menggunakan Peristiwa?

  1. Pemisahan (Decoupling): Peristiwa membantu memisahkan bagian-bagian berbeda dalam aplikasi anda. Itu seperti memiliki tim-tim berbeda di kerja - setiap tim tidak perlu tahu segala sesuatu tentang apa yang dilakukan tim lain.

  2. Kemudahan (Flexibility): Anda dapat dengan mudah menambahkan reaksi baru kepada peristiwa tanpa mengubah kod yang sudah ada.

  3. Ketelusan (Clarity): Peristiwa membuat kod anda mudah dipahami. Itu jelas apa yang sedang terjadi dan kapan.

Membuat Peristiwa Pertama Anda

Mari kita buat peristiwa pertama kita bersama. Kita akan membuat peristiwa yang terjadi saat pengguna baru mendaftar. mari kita lihat bagaimana caranya:

php artisan make:event NewUserRegistered

Perintah ini membuat file baru di app/Events yang dinamai NewUserRegistered.php. mari kita lihat isinya:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class NewUserRegistered
{
use Dispatchable, InteractsWithSockets, SerializesModels;

public $user;

public function __construct($user)
{
$this->user = $user;
}

public function broadcastOn()
{
return new PrivateChannel('channel-name');
}
}

Jangan biarkan semua kode ini menakutkan anda! Itu seperti resep - kita akan menjelaskan setiap bahan:

  • Statement use di atas adalah seperti mengimpor alat-alat yang kita mungkin butuhkan.
  • Kelas event NewUserRegistered adalah tempat sihir terjadi.
  • Properti $user akan menyimpan informasi tentang pengguna baru.
  • Metode __construct dipanggil saat kita membuat event ini, dan itu menyimpan informasi pengguna.

Mengirim (Dispatch) Peristiwa

Sekarang kita memiliki peristiwa, mari kita gunakan nya! Kita akan mengirim peristiwa ini saat pengguna baru mendaftar. mari kita lihat bagaimana kita mungkin melakukan itu dalam kontroler:

use App\Events\NewUserRegistered;

public function register(Request $request)
{
// ... logika pendaftaran pengguna ...

$user = User::create($request->all());

event(new NewUserRegistered($user));

return redirect('/welcome');
}

Di sini, setelah kita membuat pengguna baru, kita mengirim event menggunakan fungsi event(). Itu seperti meledakkan kembang api untuk menyambut pengguna baru!

Mendengar Peristiwa

Sekarang, mari kita buat listener yang akan mereaksi kepada peristiwa kita. Bayangkan ini sebagai orang di pesta yang bertanggung jawab memberikan topi pesta saat kue tiba.

Pertama, mari kita buat listener:

php artisan make:listener SendWelcomeEmail --event=NewUserRegistered

Ini membuat file baru di app/Listeners yang dinamai SendWelcomeEmail.php. mari kita lihat isinya:

<?php

namespace App\Listeners;

use App\Events\NewUserRegistered;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;

class SendWelcomeEmail
{
public function handle(NewUserRegistered $event)
{
// Akses pengguna menggunakan $event->user
// Logika mengirim email sambutan di sini
}
}

Metode handle adalah tempat kita menaruh kode yang akan berjalan saat event terjadi. Dalam hal ini, kita akan menaruh logika pengiriman email sambutan.

Mendaftarkan Listener Peristiwa

Untuk menghubungkan event kita dengan listener, kita perlu mendaftarkan mereka. Buka app/Providers/EventServiceProvider.php dan tambahkan ini ke array $listen:

protected $listen = [
NewUserRegistered::class => [
SendWelcomeEmail::class,
],
];

Ini memberitahu Laravel, "Hey, saat NewUserRegistered terjadi, jalankan SendWelcomeEmail!"

Pengguna Subscriber Event

kadang-kadang, Anda mungkin ingin satu kelas untuk menghandle beberapa event. Itu di mana event subscribers masuk. Mereka seperti planner pesta yang bertanggung jawab atas beberapa aspek pesta.

mari kita buat event subscriber:

php artisan make:listener UserEventSubscriber

Lalu, dalam kelas UserEventSubscriber:

<?php

namespace App\Listeners;

class UserEventSubscriber
{
public function handleUserRegistered($event) {}

public function handleUserLoggedIn($event) {}

public function subscribe($events)
{
$events->listen(
'App\Events\NewUserRegistered',
'App\Listeners\UserEventSubscriber@handleUserRegistered'
);

$events->listen(
'App\Events\UserLoggedIn',
'App\Listeners\UserEventSubscriber@handleUserLoggedIn'
);
}
}

Untuk mendaftarkan subscriber ini, tambahkan ini ke properti $subscribe di EventServiceProvider:

protected $subscribe = [
'App\Listeners\UserEventSubscriber',
];

Listener Peristiwa Dalam Antrian

Jika listener event anda melakukan sesuatu yang memakan waktu (seperti mengirim email), anda mungkin ingin mengantrian nya sehingga tidak memperlambat aplikasi anda. Itu seperti mengatakan ke seseorang, "Hey, bisakah anda melakukan tugas ini nanti saat anda tidak sibuk?"

Untuk membuat listener queueable, implementasikan interface ShouldQueue:

use Illuminate\Contracts\Queue\ShouldQueue;

class SendWelcomeEmail implements ShouldQueue
{
// ...
}

Sekarang, Laravel secara otomatis akan mengantrian listener ini!

Tabel Metode Event

Berikut adalah tabel praktis dari metode utama yang kita gunakan dengan event:

Metode Deskripsi
event() Mengirimkan event
listen() Mendaftarkan listener event
subscribe() Mendaftarkan event subscriber
dispatch() Cara lain untuk mengirimkan event
broadcast() Mengirimkan event (untuk aplikasi real-time)

Dan itu lah, murid-murid sayang! Kita telah melantikan pengembaraan melalui negeri pengurusan peristiwa Laravel bersama. Ingat, latihan membuat sempurna, jadi jangan takut untuk mencoba konsep ini dalam proyek-proyek anda sendiri. Siapa tahu? Anda mungkin saja menjadi tuan pesta kode terbaik dengan keterampilan pengurusan event baru anda!

Selamat coding, dan mayat event anda selalu dihandle dengan keanggunan dan gaya!

Credits: Image by storyset