Understanding Events in Laravel

Other Blogs

Blogs ❯❯ Laravel

Image could not load

Laravel Events Example

Laravel एक powerful PHP framework है जो आपको multiple features provide करता है जिसमे से Events भी एक important concept है। Events का use application में specific actions को decouple करने के लिए होता है, जो कि एक clean architecture को promote करता है।

इस blog में, हम Events के बारे में detail से समझेंगे और देखेंगे कैसे आप Laravel में events create कर सकते हैं और उन्हें handle कर सकते हैं।

What Are Events in Laravel?

Laravel में Events एक way है कि आप कुछ specific actions को handle कर सकें जब कोई specific condition या task complete हो।

जैसे कि -

  • User login hone पर email भेजना।

  • Order place hone पर invoice generate करना।

  • Post publish hone पर notifications भेजना।

Event-Listener का concept Laravel में use होता है जिसमे आप एक event को trigger करते हो और उस event के साथ related listener को execute करते हो।

Laravel Event Example

Example के लिए, UserRegistered event जब trigger होता है, तो listener (जैसे कि SendWelcomeEmail) execute होता है।

Step 1 : Creating Events in Laravel

i). सबसे पहले आपको अपना custom event class create करनी होती है। Laravel में event create करने के लिए, हम make:event command का use करते हैं।

php artisan make:event UserRegistered

इस command के बाद, app/Events/UserRegistered.php file create हो जाएगी। UserRegistered.php का code कुछ इस तरह दिखेगा।

namespace App\Events; use Illuminate\Queue\SerializesModels; class UserRegistered { use SerializesModels; public $user; /** * Create a new event instance. * * @return void */ public function __construct($user) { $this->user = $user; // Pass the user object to the event } }
Explanation
  • SerializesModels : ये trait ensure करता है कि event को queue में push करते वक्त model को properly serialize किया जाये।

  • __construct() : यह method event के data को handle करता है. जैसे यहां, हम UserRegistered event के साथ user object को pass कर रहे हैं।

ii) Create Listener Class

जब event trigger होता है, उसको handle करने के लिए हमें Listener class बनानी पड़ती है। Listener वो class होती है जो event के execution के बाद run होती है।

Listener create करने के लिए, आप ये command run कर सकते हैं -

php artisan make:listener SendWelcomeEmail --event=UserRegistered

command के बाद app/Listeners/SendWelcomeEmail.php file create हो जाएगी। SendWelcomeEmail.php का code कुछ इस तरह दिखेगा।

namespace App\Listeners; use App\Events\UserRegistered; use Illuminate\Support\Facades\Mail; class SendWelcomeEmail { /** * Handle the event. * * @param \App\Events\UserRegistered $event * @return void */ public function handle(UserRegistered $event) { // Send welcome email to the registered user Mail::to($event->user->email)->send(new \App\Mail\WelcomeEmail($event->user)); } }
Explanation
  • handle() method वो function है जहाँ आप अपनी logic लिखते हैं जो event के trigger hone पर execute होता है।

  • $event->user से हम वो user object ले रहे हैं जो हमने event में pass किया था।

Step 2: Registering Events and Listeners

अब तक हमने अपना event और listener create कर लिया है। अब हमें इन्हे EventServiceProvider में register करना पड़ेगा ताकि Laravel इन दोनो को recognize कर सके।

i) app/Providers/EventServiceProvider.php file में जाएँ।

ii) इस file में $listen property होती है जहाँ आपको events और उनके corresponding listeners को register करना होता है।

protected $listen = [ \App\Events\UserRegistered::class => [ \App\Listeners\SendWelcomeEmail::class, ], ];

यह code बताता है कि जब UserRegistered event trigger होगा, तो SendWelcomeEmail listener execute होगा।

Step 3: Triggering Events

अब आपको अपनी application में जब need हो, तब event को trigger करना होता है। Laravel में event को trigger करना काफी आसान है।

आप event() helper function का use करके event trigger कर सकते हैं।

use App\Events\UserRegistered; $user = User::find(1); // Example user event(new UserRegistered($user)); // Trigger the event

इस example में, जब UserRegistered event trigger होता है, तो Laravel automatically उससे associated listener को run कर देता है, जो email भेजने का काम करेगा।

Step 4: Testing the Events

आप अपने events को test कर सकते हैं ताकि confirm हो सके कि सब कुछ सही से काम कर रहा है।

  1. Manual Testing : आप अपने application में event trigger कर के देख सकते हैं कि listener का code execute हो रहा है या नहीं। अगर आपने email भेजने कि logic लिखा है, तो email आपको receive होगा।

  2. Unit Testing : Laravel में event और listener को test करने के लिए आप unit tests लिख सकते हैं। इससे आप ensure कर सकते हैं कि आपका event और listener correctly function कर रहा है।

Example test:

public function test_welcome_email_is_sent() { $user = factory(User::class)->create(); // Create a user event(new UserRegistered($user)); // Trigger the event Mail::assertSent(WelcomeEmail::class, function ($mail) use ($user) { return $mail->hasTo($user->email); }); }

Benefits of Using Events In Laravel

  • Separation of Concerns : Events और listeners का use आपके application के logic को modular बनाता है। आपके main business logic को separate करके, आप easily उन्हें manage और extend कर सकते हैं।

  • Decoupling : Events के use से आप code को loosely couple करते हैं। जैसे कि, जब user register होता है, तो आप directly user registration के code में email भेजने का code नहीं लिखते। Event trigger होता है और listener handle करता है।

  • Asynchronous Processing : अगर आपके event कि handling time-consuming है (e.g., email send करना), तो आप events को queue में दाल सकते हैं, जिससे कि आपके application का performance impact न हो।

  • Easy Testing : Laravel में events और listeners को test करना काफी आसान होता है, जो आपके development process को smooth बनाता है।

Queue System with Listeners

अगर आप चाहते हैं कि आपके listeners asynchronously execute हो (e.g., जब कोई time-consuming task हो जैसे email भेजना), तो आप listeners को queues के through handle कर सकते हैं।

Queues का use करने से task background में execute होता है, जो application के response time को affect नहीं करता।

// Event Listener class SendWelcomeEmail { public function handle(UserRegistered $event) { // Sending email in queue \Mail::to($event->user->email)->queue(new WelcomeEmail($event->user)); } }

अगर आप queue use कर रहे हैं, तो आपको queue worker को run करने के लिए एक separate process start करना होता है। यह worker process आपके background tasks को handle करेगा।

php artisan queue:work

यह command continuously background में queue tasks को process करती है।

हालाँकि अगर command line close हुआ तो background process भी band हो जाएगी। इसलिए Ubuntu OS में इसे hyper-visor में इसके लिए worker define कर दिया जाता है।

I Hope, अब आपको laravel में आपको events के बारे में अच्छे से समझ आ गया होगा।

Happy Coding :)

Hey ! I'm Rahul founder of learnhindituts.com. Working in IT industry more than 5.5 years. I love to talk about programming as well as writing technical tutorials and blogs that can help to others .... keep learning :)

Get connected with me - LinkedIn Twitter Instagram Facebook

Your Thought ?

Please wait . . .

    Recent Blogs

    Loading ...

    0 Comment(s) found !