Yii2da event yaratish

VcbJs0Raz0MxmH4FwQQw_27.jpg

Buning uchun quyidagi misolni olaylik:

Faraz qilaylik sizning saytingizdan foydalanuvchi birinchi marta ro’yxatdan o’tganda ushbu foydalanuvchi ustida biror ishni amalga oshirmoqchisiz.

Masalan:

  1. Adminning elektron pochtasiga xabar yubormoqchisiz.
  2. Xabar beruvchi modal oyna yaratmoqchisiz.
  3. Unga nom bermoqchisiz

Bunda siz foydalanuvchi ro’yxatdan o’tganidan keyin bir nechta metodni ishga tushirib yuqoridagi amallarni bajarashingiz mumkin. Masalan:

if(model->save()){
       $mailObj->sendNewUserMail($model);
       $notification->setNotification($model);
}

Mana shu amallarni bajarish paytida sizda yuqorida berilgan kod juda yaxshi ishlab turadi. Lekin, agar yanayam ko’proq, masalan foydalanuvchi ro’yxatdan o’tganidan so’ng 10ta amalni bajarishingiz kerak bo’lib qolsa, unda nima qila olasiz? Bu holatda eventlar qo’l kelib qoladi.

Eventning asosiy tushunchalari.

Eventlar quyidagi ketma-ket jarayonlardan tashlil topadi:

  1. Yangi event yaratasiz.
  2. Model ichida unga nom berasiz. User modeli ichida konstata qilib e’lon qilishingiz ham mumkin. Masalan, const EVENT_NEW_USER = ‘new_user’; singari.
  3. Ushbu e’lon qilingan event uchun shu event yuz bergan paytda ishga tushadigan metodni yaratasiz. Masalan, adminga email yuborishni olaylik. Bu metodimizda $event parametri bo’lishi kerak. Bu metodni handler(ushlab olvchi) deb ataymiz.
  4. Yuqorida yaratgan handler metodimizni modelimizga biriktiramiz. Bunda modelning on() metodidan foydalanamiz. On() metodini xohlagancha ishlatishingiz mumkin.
  5. Yaratilgan eventni trigger() metodi yordamida ishga tushirishimiz mumkin.

Yuqorida aytib o’tilgan barcha metodlar(on(), trigger()) Component klassining qismi hisoblanadi. Yii2dagi deyarli barcha klasslar shu klassdan meros oladi. Albatta ActiveRecord klassi ham.

 

Endi ko’rgan misolimizni kodga o’giraylik.

User.php faylidagi User modeliga quyidagi kodlarni qo’shamiz:

const EVENT_NEW_USER = ‘new_user’;

public function sendMail($event)

{

    echo “Xabar adminga jo’natildi”;

    // biror vazifani shu yerda bajarasiz
}

Yaratgan handler metodimizni eventga bog’laymiz. Buning uchun asosiy usullardan biri ActiveRecord klassning init() metodidan foydalanamiz. Kod quyidagicha:

public function init()
{
    $this->on(self::EVENT_NEW_USER, [$this, ‘sendMail’]);

    // bu yerda 1-parametr event nomi, 2-si handler

    parent::init();// parent metodni chaqirishni unutmang

}

Oxirgi qilinadigan ish eventni ishga tushirish:

if($model->save()){

      $model->trigger(User::EVENT_NEW_USER);
}

Handler metodi avtomatik chaqiriladi.

Manbaa: stackoverflow.com