インストールしてとりあえず動作させる

Zend Frameworkをとりあえず動作させてみました。
前提は、php5が動作する環境になっていることです。
環境は、MAC OSX10.5.4(Leopard)で行いました。

インストール

http://framework.zend.com/download/latest」よりパッケージをダウンロードして解凍します。今回は「1.6.1」のバージョンをダウンロードしました。そのうち「ZendFramework-X.X.X/library/Zend」をphp.iniでinclude_pathに設定されている箇所にコピーします。

$sudo cp -R  ZendFramework-1.6.1/library/Zend /usr/local/lib/php/

アプリケーションの構造をつくる

まずアプリケーションのディレクトリを作成

$mkdir zendboard

アプリケーション以下の各ディレクトリを作成

$cd zendboard
$mkdir controllers
$mkdir views
$mkdir views/scripts
$mkdir lib
$mkdir public
    1. controllers,model,viewsは標準のコントローラ、モデル、ビューの置き場です。
    2. publicはWebサーバからの公開パスにします。

apacheへのコンテキスト設定

apacheの設定ファイル(ファイルはは「/etc/apache2/users/<ユーザアカウント>.conf」)を変更。作成したアプリケーション構造のpublicをコンテキストの場所として設定。
今回は、バーチャルホストでの設定を行いました。

NameVirtualHost 192.168.24.32

<VirtualHost kyonkyon.goronyan.as.wakwak.ne.jp>
  DocumentRoot /Users/nyaago/workspace/zendboard/public
  ServerName kyonkyaon
  ServerAdmin nyaago@goronyan.as.wakwak.ne.jp
  AddType application/x-httpd-php .php
  DirectoryIndex index.php index.html
  AddType application/x-httpd-php .php
  Options Indexes MultiViews ExecCGI FollowSymLinks Includes
</VirtualHost>

htaccessの設定

webサーバ公開パスに(今回は「/public」)に.htaccessを作成、Rewriteの設定を行います。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ /index.php [NC,L]
    1. 通常ファイル(-f)、シンボリックリンク(-l),ディレクトリ(-d)であれば、そのファイルをクライアントにかえします。(5行目)
    2. そうでなければ、zend Frameworkのフロントコントローラーとなるindex.phpに振り分けるようにします。

フロントコントローラーの作成

webサーバ公開パスに(今回は「/public」)にindex.phpを作成。このスクリプトがクライアントのリクエストを1手に引き受けるかたちとなります。++Zend_Controller_Frontインスタンスのdispatch()メソッドをコールすることにより、適切なコントローラのアクションの実行、ビューの表示が行われます。

<?php
defined('APPLICATION_PATH')
    or define('APPLICATION_PATH', dirname(__FILE__) . '/../');
defined('APPLICATION_ENVIRONMENT')
    or define('APPLICATION_ENVIRONMENT', 'development');
set_include_path(
    APPLICATION_PATH . '/lib'. PATH_SEPARATOR . get_include_path()
);

require_once 'Zend/Controller/Front.php';

$frontController = Zend_Controller_Front::getInstance();
$frontController->setControllerDirectory(APPLICATION_PATH . '/controllers');
$frontController->setParam('env', APPLICATION_ENVIRONMENT);
$frontController->setParam('useDefaultControllerAlways', true);
$frontController->dispatch();
?>
    1. フロントコントローラーの'useDefaultControllerAlways'というパラメータを指定することにより対応するコントローラーが定義されていないとデフォルトのコントローラーが実行されるようになります。デフォルトのコントローラーとは通常、IndexControllerとなります。
    2. setControllerDirectory()でコントローラーのディレクトリを指定しています。

コントローラーを実装

コントローラー、アクションを実装します。今回は、indexコントローラーとそのコントローラー内にindexアクションを定義します。を上記のindex.phpで設定したコントローラーのディレクトリ(<アプリケーションパス>/controller)のIndexController.phpというファイルをつくりファイルと同名のIndexControllerをZend_Controller_Actionを継承して定義します。またアクションメソッドとしてindexActionを定義します。なお、このアクションの内容は単に現在日付をクライアントに返すだけです。

<?php
require_once 'Zend/Controller/Action.php';

class IndexController extends Zend_Controller_Action 
{
    public function indexAction() 
    {
		$this->view->result = date('Y-m-d');
    }
}
?>
    1. 以上のようにコントローラーのクラス名はController,アクションメソッド名はActionとなります。リクエストurlは<ベースuri>////となります。今回パラメータはないので、「<ベースuri>/index/index」で起動されるアクションを定義したことになります。ただしコントローラーでもアクションでもindexはデフォルトなので「<ベースuri>/」だけでもこのアクションは起動されます。

ビューを実装

上記のアクションに対応するビューを作成します。ビューは<アプリケーショントップ>/views/scripts/<コントローラー名>/<アクション名>.phtmlという名前で作成します。今回具体的には「<アプリケーショントップ>/views/scripts/index/index.phtl」となります。書き方は基本的に普通のphpとおなじです。コントローラー側のviewに設定された変数(<= $this->view->変数名のかたちで)を$this->変数名のかたちで参照できるので

<html>
<body>
<?php print($this->escape($this->result)); ?>
</body>
</html>

以上、実装後ブラウザで「<ベースuri>」のかたち(今回具体的には「http://kyonkyon.goronyan.as.wakwak.ne.jp/」)でアクセスすると、結果が表示されます(本日日付が表示されるだけ..)