menu
書いてる野郎
orebike@gmail.com
とりあえず動かしてみる
Zend Frameworkではユーザーに公開するのは1ファイルindex.phpのみ。こいつが全リクエストを捌く。
公開するディレクトリに index.php を作成
// コンポーネントをロードする require_once 'Zend/Controller/Front.php'; //自動描画モードをオフる $front = Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true); // アプリケーションを実行する $front = Zend_Controller_Front::run('../application/controllers');
最後のrunメソッドに渡しているパスは index.php から見たアクションコントローラの入っているディレクトリの相対パス
Zendのコントローラーは通常のような
http://localhost/hoge/index.php?piyo=gegege
のようにパラメータを取らない。フロントコントローラーで全部受け取るという違和感をなくすために
http://localhost/hoge/moge/moge/piyo/gegege
のようなリクエストでプログラムを始動させる。
なのでWebサーバ側がスラッシュ区切りをディレクトリと判断しないために指定ディレクトリ以下のリクエストを全部index.phpへのリクエストと解釈させる必要がある。
.htaccessを作る
php_flag magic_quotes_gpc off RewriteEngine on RewriteBase / RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
RewriteBase というのはそのアプリの根っこのディレクトリを指定する。
http://localhost/hoge/index.php
にindex.phpを配置してるなら、RewriteBase は
/hoge/
Apache のデフォルトでは多分 htaccess による設定の上書きを禁止しているので httpd.conf とか Apache.conf あたりに
<Directory /var/www> </Directory>
こんなふうに書いて中に何か書いて、htaccessによる設定の上書きを許可
フロントコントローラーはリクエストに応じてもっと細かい処理であるアクションコントローラーに処理を渡す。
何もリクエストでパラメータを渡さない場合
http://localhost/hoge/
のようなリクエストの場合はフロントコントローラーは IndexController.php
の indexAction
メソッドを呼び出します。なのでここにHelloWorld描画の記述を書く。
<?php require_once 'Zend/Controller/Action.php'; require_once 'Zend/Db.php'; class IndexController extends Zend_Controller_Action{ public function indexAction(){ $view = new Zend_View(); $view->setScriptPath('../application/views'); $view->hogehogehoge = 'HelloWorld'; echo $view->render('hoge.php'); } }
ここで Zend_View という簡易的なテンプレートエンジンのようなオブジェクトを使う。
PHP はもともと言語仕様がテンプレートエンジン的なので単にそれをオブジェクトでラップしたものと考える。 HTML のすぐ裏に PHP のコードが透けて見えるぐらいのこの感覚。
setScriptPath メソッドで View が描画するためのコードが書いてあるソース群が配置されているディレクトリを指定。 気をつける点はアクションコントローラーは index.php に include されて動いているということ。 ここで使うパスの指定はindex.phpからの相対パスということになる。
最後に render メソッドを使って文字列として画面に出力。ここの引数が view ソース群中のファイル名になる。
アクションコントローラーのViewで指定されたコード
古きPHPコード。HTMLに断片的にPHPコードが混じっているあれ。 view は単純なことしかしないのでコレで十分実用的。
<html> <head> <title>何か</title> </head> <body> へろ〜〜わ〜るど <?php echo $this->hogehogehoge){ ?> </body> </html>
ここで this キーワードを使ってコントローラーで貼り付けた変数にアクセスできる。 コントローラー裏で
$view->hogehogehoge = 'HelloWorld';
変数に突っ込んでいるので。同じ変数名でView側で取り出せる。
ファイルはこんな感じで配置する
hoge(公開ディレクトリ) | +--index.php | +--.htaccess application(非公開ディレクトリ) | +--controllers | | | +--IndexController.php +--views | +--hoge.php
http://localhost/hoge/
にアクセスすると HelloWorld
が表示されるはず