public function getEventManager() {
if (empty($this->_eventManager)) {
$this->_eventManager = new CakeEventManager();
$this->_eventManager->attach($this->Behaviors);
$this->_eventManager->attach($this);
}
return $this->_eventManager;
}
https://github.com/cakephp/cakephp/blob/2.2.3/lib/Cake/Model/Model.php#L755
CakePHP2系はCakeEventが内部で使われているらしく、ModelがCakeEventManagerを持って、そこにオブジェクトを付けていってます。
$event = new CakeEvent('Model.beforeSave', $this, array($options));
list($event->break, $event->breakOn) = array(true, array(false, null));
$this->getEventManager()->dispatch($event);
https://github.com/cakephp/cakephp/blob/2.2.3/lib/Cake/Model/Model.php
Model->save()内でevent名を指定してdispatch()してるコードがありました。
これ以上は追いかけてないけど、attach()した順番だと思うから、Behavior->beforeSave()が先に動いてからModel->beforeSave()が動くんじゃ無いかと思います。