第3回 ブログツールで学ぶ実践的Zend Frameworkの使い方「Zend Framework」で加速するPHP開発(2/5 ページ)

» 2007年03月08日 07時30分 公開
[杉田直哉,ITmedia]

Alex@Net Blogの内部構造

 Alex@Net Blogは、Routerとして「Zend_Controller_Router」を使用しています。そのため、「http://ホスト名/コントローラ名/アクション名」としてURIが解釈され、index.phpにrewriteされます(図2)。また、httpd.confで設定しているDocumentRoot直下にindex.phpを配置する必要があります。

図2 図2 Alex@Net BlogのアクションとURI

フロントコントローラ

 フロントコントローラはリスト2のようになっています。処理の内容を見てみましょう。

set_include_path('./_/library/');

require_once 'config.php';

require_once 'Zend/Controller/Front.php';

Zend_Controller_Front::run('./_/application/controllers');


リスト2 フロントコントローラのコード

 まず、set_include_pathには、Alex@Net Blogのディレクトリツリー内部にあるZend Frameworkのディレクトリが指定されています。アクセスのたびにindex.phpの処理が行われるので、Zend Frameworkは、必ずPHPのinclude_pathに入るようになります。

 次に、require_onceで、アプリケーションの設定が記述されているconfig.phpを読み込みます。config.php内にConfigクラスが定義され、ディスパッチ先のコントローラでオブジェクトとして扱われます。また、その次で、フロントコントローラとなるFront.phpも読み込まれています。

 最後に、Zend_Controller_Front::runでルーティングとディスパッチが行われます。このときのrunメソッドに指定されている引数は、アクションコントローラを置いてあるディレクトリです。ディスパッチの際に、該当するアクションが存在するかどうか調べるので、そのためにディレクトリを引数として指定するのです。

 このルーティングは、Zend_Controller_RewriteRouterで表現するとリスト3のようになります。こちらの方がより冗長な記述になっていますが、複数のルーティングパターンを設定可能など、柔軟な制御が行えます。

$router = new Zend_Controller_RewriteRouter();

$router->addRoute('user', ':controller/:action', array('controller' => 'Index', 'action' => 'Index'));

$ctrl = Zend_Controller_Front::getInstance();

$ctrl->setRouter($router);

$ctrl->setControllerDirectory('./application/controllers')->dispatch();


リスト3 Zend_Controller_RewriteRouterで表現したリスト2と同等のコード

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ