yiiyii-componentsyii-events

Yii: attaching events to models


I have a User model which is bundled in a module installed on my Yii application. This module is third party and I do not want to alter its code.

I also have a Cv Model that has a BELONGS_TO relation with the User model.

My question is: How can I delete the cv when a user is deleted ? I know that I can achieve this with on delete cascade ... on mysql. However, i do need to delete other data such as a photo, files, etc.

What I have tried

I have created a component that is preloaded on my application. This component attaches to an onAfterDelete event

class EventListener extends CComponent 
{
    public function init() {

        Yii::import("application.modules.users.models.User");

        User::model()->attachEventHandler('onAfterDelete', array($this, 'deleteUser'));
    }


    public function deleteUser($event)
    {
        // stuff here ...
    }
}

However this does not work.

Any suggestions ?


Solution

  • This may help you.

    User::model() is a singleton

    $user1 = User::model();
    $user2 = new User; // will be used in insert action
    $user3 = User::model()->findByPk(10); // will be used in update/delete action
    

    $user1, $user2 and $user3 are completely different objects. You can attach events to objects, in this case you have to add events to all these 3 objects individually.

    $user1->attachEventHandler(...);
    $user2->attachEventHandler(...);
    $user3->attachEventHandler(...);
    

    look like Yii does not provide any way to add events at Class level.