Rumah >pembangunan bahagian belakang >tutorial php >Pusatkan pemberitahuan dan pengendalian kerja anda

Pusatkan pemberitahuan dan pengendalian kerja anda

王林
王林asal
2024-09-10 06:46:32692semak imbas

Centralize your notification and job handling

Untuk memudahkan penghantaran berbilang pemberitahuan e-mel selepas pelbagai acara (seperti penciptaan pengguna, penetapan semula kata laluan, dll.), anda boleh mengambil beberapa langkah untuk memusatkan pemberitahuan dan pengendalian kerja anda. Pendekatan ini akan menjadikan kerja anda lebih mudah dan lebih berskala tanpa perlu membuat kerja atau pemberitahuan berasingan untuk setiap acara.

Strategi untuk Memudahkan Pengendalian Pemberitahuan E-mel:

  1. Gunakan Kerja Pemberitahuan E-mel Umum.
  2. Manfaatkan Seni Bina Pendengar Acara.
  3. Pemberitahuan Serupa Kumpulan.

1. Buat Kerja Pemberitahuan E-mel Umum:

Daripada membuat kerja berasingan untuk setiap pemberitahuan, anda boleh membuat kerja boleh guna semula tunggal yang mengambil pemberitahuan dan pengguna sebagai parameter. Dengan cara ini, kerja yang sama boleh digunakan untuk mengendalikan pemberitahuan yang berbeza.

SendEmailNotificationJob Umum:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Notifications\Notification;
use App\Models\User;

class SendEmailNotificationJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $user;
    public $notification;

    /**
     * Create a new job instance.
     *
     * @param  User $user
     * @param  Notification $notification
     * @return void
     */
    public function __construct(User $user, Notification $notification)
    {
        $this->user = $user;
        $this->notification = $notification;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        // Send the notification
        $this->user->notify($this->notification);
    }
}

Dengan kerja umum ini, anda boleh menghantar pelbagai jenis pemberitahuan e-mel menggunakan kerja yang sama:

Contoh Penggunaan:

use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Models\User;

$user = User::find(1); // Example user

// Dispatch a welcome email notification
SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());

// Dispatch a password reset notification
SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());

2. Manfaatkan Seni Bina Pendengar Acara:

Daripada menghantar kerja secara manual selepas setiap acara, seni bina pendengar acara Laravel membolehkan anda mencetuskan pemberitahuan dan kerja secara automatik berdasarkan acara tertentu (seperti penciptaan pengguna).

Langkah 1: Tentukan Acara:

Anda boleh menentukan acara seperti UserCreated:

php artisan make:event UserCreated

Contoh Acara Cipta Pengguna:

namespace App\Events;

use App\Models\User;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class UserCreated
{
    use Dispatchable, SerializesModels;

    public $user;

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

Langkah 2: Cipta Pendengar:

Anda boleh mencipta pendengar yang menghantar pemberitahuan apabila acara dicetuskan:

php artisan make:listener SendUserWelcomeNotification --event=UserCreated

Contoh Pendengar:

namespace App\Listeners;

use App\Events\UserCreated;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;

class SendUserWelcomeNotification
{
    public function handle(UserCreated $event)
    {
        // Dispatch the email notification job
        SendEmailNotificationJob::dispatch($event->user, new UserWelcomeNotification());
    }
}

Langkah 3: Peristiwa Kebakaran pada Penciptaan Pengguna:

Setiap kali pengguna dibuat, anda boleh melancarkan acara itu dan Laravel akan mengendalikan selebihnya secara automatik:

use App\Events\UserCreated;

$user = User::create($data);
event(new UserCreated($user));

Pendekatan ini membolehkan anda memisahkan logik pengendalian pemberitahuan daripada logik perniagaan anda, menjadikan sistem lebih berskala.

3. Pemberitahuan Serupa Kumpulan:

Jika anda mempunyai banyak pemberitahuan serupa (cth., pemberitahuan berkaitan pengguna seperti e-mel alu-aluan, tetapan semula kata laluan, dll.), anda boleh membuat Perkhidmatan Pemberitahuan yang mengendalikan semua pemberitahuan pengguna secara terpusat.

Contoh Perkhidmatan Pemberitahuan:

namespace App\Services;

use App\Models\User;
use App\Jobs\SendEmailNotificationJob;
use App\Notifications\UserWelcomeNotification;
use App\Notifications\PasswordResetNotification;

class NotificationService
{
    public function sendUserWelcomeEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new UserWelcomeNotification());
    }

    public function sendPasswordResetEmail(User $user)
    {
        SendEmailNotificationJob::dispatch($user, new PasswordResetNotification());
    }

    // You can add more methods for different types of notifications
}

Contoh Penggunaan:

Dalam pengawal atau pendengar acara anda, anda kini boleh menghubungi perkhidmatan tersebut:

$notificationService = new NotificationService();
$notificationService->sendUserWelcomeEmail($user);

Kesimpulan:

  • Kerja Tunggal: Anda boleh menggunakan kerja umum (SendEmailNotificationJob) untuk mengendalikan pelbagai jenis pemberitahuan.
  • Seni Bina Pendengar Acara: Gunakan sistem pendengar acara Laravel untuk mencetuskan pemberitahuan secara automatik berdasarkan peristiwa sistem.
  • Perkhidmatan Pemberitahuan Berpusat: Kumpulkan pemberitahuan serupa dalam perkhidmatan untuk pengurusan dan kebolehgunaan semula yang lebih baik.

Pendekatan ini membantu mengekalkan kod anda KERING (Jangan Ulangi Sendiri) dan menjadikannya lebih mudah untuk diselenggara apabila anda mempunyai berbilang pemberitahuan e-mel untuk dihantar.

Atas ialah kandungan terperinci Pusatkan pemberitahuan dan pengendalian kerja anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn