19
How to use Observers in Laravel?
So what are observers in Laravel and why you should use them?
Observers in Laravel help you to fire multiple events or do a CRUD operation in database!
When you create an observer, it will listen to a specific condition for a model, e.g: if user create a post and he/she achieved a certain level, the observer will fire related method(event) and do what ever you wrote!
In this world websites, there are so many things we want to do after a user registered in our website! e.g: send an email, send SMS and etc... So why not leave them to Observers!
First, run this command to make a user observer (for User model):
php artisan make:observer UserObserver --model=User
Second, you will see four methods in it, that will run when their condition are true. these methods are:
namespace App\Observers;
use App\Models\User;
class UserObserver
{
/**
* Will do what you want When an instance of model created
*
* @param \App\Models\User $user
* @return void
*/
public function created(User $user)
{
//
}
/**
* Will do what you want When an instance of model updated
*
* @param \App\Models\User $user
* @return void
*/
public function updated(User $user)
{
//
}
/**
* Will do what you want When an instance of model deleted
*
* @param \App\Models\User $user
* @return void
*/
public function deleted(User $user)
{
//
}
/**
* Will do what you want When an instance of model force deleted
*
* @param \App\Models\User $user
* @return void
*/
public function forceDeleted(User $user)
{
//
}
}
You should know there is some other functions like: creating, updating, saving, afterSaving, restore
and etc... so you have a handful feature observer for many situations.
Maybe we just want to send a welcome message to user whenever he/she registered!
we may use create()
method, as below:
public function created(User $user)
{
Mail::to($user)->send(newUserRegisteredMailable($user));
}
And third one is registering our observer in the boot method of your application's App\Providers\EventServiceProvider
service provider:
use App\Models\User;
use App\Observers\UserObserver;
/**
* Register any events for your application.
*
* @return void
*/
public function boot()
{
User::observe(UserObserver::class);
}
That's it.
19