サンプル
フォルダ構成
「*」は、フォルダの意味で、付いてなければ、ファイルを意味する* アプリケーションのルートディレクトリ | +- * public(公開用ディレクトリ) | +- .htaccess | +- index.php | +- * application(MVCアプリケーションのフォルダ・ファイルを格納するためのディレクトリ) +- * controllers(コントローラ関係のファイルを格納するためのディレクトリ) | +- IndexController.php
【1】.htaccess の作成
RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|jpeg|png|css|htm|html)$ index.php
説明
* 拡張子が(js|ico|gif|jpg|jpeg|png|css|htm|html)のファイルでアクセスされた場合、全てindex.phpとみなしてしまうようにしている
目的
* index.phpで一括で制御したいため
他の参考資料
http://d.hatena.ne.jp/koto2/20080630/1214817129【2】フロントコントローラ(index.php)の作成
[a] すべてのリクエストはまず index.php に受けつけられる[b] そこで必要となる処理が判断されると、該当する「アクションコントローラ」が決定され、以後の処理が受け渡される
<?php require_once 'Zend/Controller/Front.php'; /* (1)参照 */ Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true); /* (2)参照 */ Zend_Controller_Front::run('../application/controllers'); /* (3)参照 */ ini_set( 'display_errors', true); /* (4)参照 */
(1) フロントコントローラ用のコンポーネントの呼び出し
* index.phpは、正確にはフロントコントローラではなく、『フロントコントローラを実行するためのファイル』である * そのため、1行目で、Zend/Controller/Front.phpを呼び出している require_once 'Zend/Controller/Front.php';
(2) 自動描画モードの設定
* 自動描画モードをOffにする Zend_Controller_Front::getInstance()->setParam('noViewRenderer', true);
(3) フロントコントローラのインスタンスの取得
* 2行目では、コントローラのフォルダ指定('./application/controllers')して、ディスパッチ(指定した先に制御を委ねる)をしている Zend_Controller_Front::run('./application/controllers');
(4) エラー表示の設定(オプション・任意)
* エラーを表示するかを指定している * 省略可能 ini_set('display_errors', true);
補足:閉じタグ( ?> )がないことについて
* 結論から言うと、Zend Framework特有のもので、わざと。 * つけると害がある(例:閉じタグの後に改行があると改行文字を出力してしまう等)かもしれないので注意
【3】コントローラの作成
IndexController.php
<?php require_once 'Zend/Controller/Action.php'; class IndexController extends Zend_Controller_Action { //デフォルトのアクションメソッド public function indexAction() { echo "Hello World!"; } }
構文
class 【コントローラ名】Controller extends Zend_Controller_Action { public function 【アクション名】Action() { // 行いたい処理 } }
アクションコントローラ要素の命名規則
ファイル名:<コントローラ名(最初のみ大文字)>Controller.php クラス名:<コントローラ名(最初のみ大文字)>Controller アクションメソッド名:<アクション名(すべて小文字)>Action
補足:extends Zend_Controller_Action について
* Zend_Controller_Actionクラスに、コントローラの基本的な機能が実装されているため、コントローラはこのクラスを継承している