CakePHP の Dispatcher::dispatch の処理の流れを図にしました。

webroot/index.php から呼び出される通常の処理です。これは以前、CakePHP のシーケンス図を作ってみたと言うエントリで作成したindex.phpがDispatcherをnewするまでのシーケンス図の後に続くものですので、そちらと併せてご覧くださればと思います。

フロントコントローラとも言えるindex.phpが直接実行するのがこのDispatcher::dispatchであり、そして、このDispatcher::dispatchからDispatcher::_invokeが呼び出され、そこでコントローラのオブジェクトを操作しています。モデルやビューはDispatcherからは一切見えていないという関係もよく分かるのではないでしょうか。

なお、v.2.1 で Event関連のクラスが導入され、v.2.2からDispatcherクラスがCakeEventListenerを実装しました。これにより、2.1以前のDispatcher内部の処理の一部がイベントとして切り離されています。この図は CakePHP v.2.3.0β を元に作成されました。v.2.1以前とは若干異なりますのでご注意ください。

Dispatcher::dispatchのシーケンス図(CakePHP 2.3.0β)

Dispatcher::dispatch の処理の流れ。CakePHP v. 2.3.0β

 

それにしても、シーケンス図を作成するととても整理ができますね~!かなり楽しく、そして理解がはかどる。一石二鳥。

今回からオブジェクトの生成の表現方法が分かったのでやってみた。

これ以上詳しくやると収拾が付かなくなりそうなので、あくまでもDispatcher::dispatchから目の届く範囲に絞って作成しましたが、その過程でもっと深く追いかけたいところがたくさん出て来ました。CakeEventManager::dispatchなんかがとりあえず美味しそうです♪

あと、最後の一番おいしいところ、つまりコントローラのあれやこれやの八面六臂の働きは、話題のCakePHP2実践入門に掲載されていますので、そちらでお楽しみくださいませ。