I am very confused about this events feature in Yii. I understand its similar to Drupal’s Hook system. In a sense i can call different sections of code when an event occurs. EG i update a product in a database, then I tell my application that onProductUpdate has happened. Then from different modules and other areas of my code i could call different functions that can add to this.
I just cant seem to get my head around getting it working and where to put the code. The only way i can seem to get it working is if i have the event call handlers in the innit function where the event is raised, i don’t see how this can benefit if somebody else creates an add-on module they would have to edit the original init function.
I must be reading something wrong here! I have read books and almost everything online! There doesn’t seem to be a very good tutorial to get me started!
My situation is as follows:
I have a products, when this product has been sent I raise an event. From there in the future when I add a stock system to the app I want to just add a module that changes the stock level when this event occurs without editing the original code.
I don’t get what’s the deal with Yii’s events, I feel like it’s just easier to call the function directly since they won’t respond to the event without me explicitly registering them. Is there a way to make it work like Drupal’s hook system?.
[Edit]
I’m still not convinced by the event system, probably the only thing I don’t like about Yii. I read this article and thought “am I doing this wrong?”, so I decided to try more or less what I saw, trying to handle a module’s event from another module, so I did the following:
In my ApiModule, y added
public function onVainaCheck(CEvent $event) {
$this->raiseEvent('onVainaCheck', $event);
}
Ran /api/act/commit and nothing happened, my guess is GestModule::init() was never called and so the handler was never attached, which makes sense; but then, other modules couldn’t handle the onVainaCheck event unless they are initialized before this happens, i.e. if I add a functionality and try to extend it by responding to an event in another module, I can’t do it without altering said functionality’s code. Could I, at least, do this in the config file or somewhere with a scope broad enough for me not to worry about changing my code everytime I add a module that has to respond to an event?