Hi there,
I have a class: User
I would like to add a new event: onNewUser, which I call in User::save when a new instance of User is saved:
public function beforeSave() {
if ($this->isNewRecord) {
//raise event
}
return parent::beforeSave();
}
Then, in some place elsewhere, I would like to attach a function to this event. So that when a new User is created, the function will be called.
How do I do that?
Thanks in advance
weavora
(Yury Tolochko)
2
Thanks, that’s exactly what I needed. Think this is a limitation to Yii, hopefully it will be implemented some times…
Wow, I got a fatal error about some SQL query as soon as I extended CActiveRecord.
I did not find the actual problem, but with inspiration from Weavora team, I ended up doing:
<?php
class BaseActiveRecord extends CActiveRecord {
private static $_events = array();
public function init() {
$this->attachEvents(self::$_events);
return parent::init();
}
private function attachEvents($events) {
foreach ($events as $event) {
if ($event['component'] == get_class($this)) parent::attachEventHandler($event['name'], $event['handler']);
}
}
public function attachGlobalEventHandler($name,$handler) {
self::$_events[] = array(
'component' => get_class($this),
'name' => $name,
'handler' => $handler
);
}
public function detachGlobalEventHandler($name,$handler) {
foreach (self::$_events as $index => $event) {
if ($event['name'] == $name && $event['handler'] == $handler && $event['component'] == get_class($this)) unset(self::$_events[$index]);
}
}
}
?>
It works perfectly to my needs, and now I can both assign handlers as usual, but also do it globally.
Thanks.