インストールしてとりあえず動作させる
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
-
- controllers,model,viewsは標準のコントローラ、モデル、ビューの置き場です。
- 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サーバ公開パスに(今回は「
RewriteEngine On RewriteCond %{REQUEST_FILENAME} -f [OR] RewriteCond %{REQUEST_FILENAME} -l [OR] RewriteCond %{REQUEST_FILENAME} -d RewriteRule ^.*$ - [NC,L] RewriteRule ^.*$ /index.php [NC,L]
-
- 通常ファイル(-f)、シンボリックリンク(-l),ディレクトリ(-d)であれば、そのファイルをクライアントにかえします。(5行目)
- そうでなければ、zend Frameworkのフロントコントローラーとなるindex.phpに振り分けるようにします。
フロントコントローラーの作成
webサーバ公開パスに(今回は「
<?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(); ?>
-
- フロントコントローラーの'useDefaultControllerAlways'というパラメータを指定することにより対応するコントローラーが定義されていないとデフォルトのコントローラーが実行されるようになります。デフォルトのコントローラーとは通常、IndexControllerとなります。
- 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'); } } ?>
-
- 以上のようにコントローラーのクラス名は
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/」)でアクセスすると、結果が表示されます(本日日付が表示されるだけ..)