Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kanonji/4311841 to your computer and use it in GitHub Desktop.
Save kanonji/4311841 to your computer and use it in GitHub Desktop.

beforeSave()はModelとBehaviorのどちらが先に呼ばれるか

  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()が動くんじゃ無いかと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment