# Laravel Observer patterni(shablon) ishlashtishga misol

Laravelda Observer pattern modelda bo'layotgan hodisa(event)larni eshitish va bu hodisalarga mos ravishda ma'lumot ishlarni bajarish mumkin.

Observer patterndan foydalanish uchun quyidagi ishlarni qilishingiz lozim:

1. Hodisa(event)larni kuzatmoqchi bo'lgan modelingiz uchun observer classni yarating. Bu class `Illuminate\Support\Observer` classidan vorislik(extend) oladi va class ichida modeling tinglamoqchi bo'lgan hodisalari uchun kerakli methodlarni yozib chiqing. Masalan MB ga yangi ma'lumot kiritganingizda modelda `created` hodisani tinglash orqali kerakli kodni ishga tuhsirishingiz mumkin. Aytaylik yangi foydalanuvchi ro'yxatdan o'tgan vaqtda uning pochtasiga verifikatsiyadan o'tish xabarini jo'natmoqchi bo'lsangiz buni quyidagicha qilishingi mumkin:
    

```php
namespace App\Observers;

use App\Models\User;

class UserObserver
{
    public function created(User $user)
    {
        //Foydalanuvchi yaratilgandan so'ng foydalanuvchi pochtasiga xabarini jo'natishingiz mumkn
    }
}
```

1. Observe classimizni AppServiceProvider da `boot` metodi ichida ro'yxatdan o'tkazamiz. Model bilan observe classimizni bog'lash uchun `observe` metodidan foyalanishimiz kerak bo'ladi.
    

```php
use App\Models\User;
use App\Observers\UserObserver;

public function boot()
{
    User::observe(UserObserver::class);
}
```

1. Shundan so'ng UserObserver classimiz User modelidagi eventlarni tinglab mos ravishda kodlarimizni ishga tushira oladi.Quyida yangi ro'yxatdan o'tgan foydalanuvchga verifikatsiya uchun xabar jo'natishga misol keltirilgan:
    

```php
public function created(User $user)
{
    Mail::to($user->email)->send(new VerificationEmail($user));
}
```

Yuqorida qisqacha misol asosida Observe qanday ishlashini ko'rib chiqdik. Loyihalaringizda qo'yilgan vazifaga qarab turli vaziyatlarda ishlatishingiz mumkin holatlarda bilimingizni yanada boyitishingiz uchun [laravel dokumentatsiyasidan](https://laravel.com/docs/10.x/eloquent#observers) o'rganishingiz mumkin.
