とりあえずMVCの基本になるZend_ControllerとZend_Viewについて軽く理解できたが・・・
表層的な理解をするだけで数時間・・・ちょっとつかれた
予想される基本的な流れ
1.アクセスをindex.phpで集約する
2.index.php内部にて認証を行う
3.認証失敗ならログインページへジャンプ
4.認証成功ならZend_Controllerを使って適切な関数を実行
5.その関数内部でDBとのやりとり
6.5の結果をZend_Viewで表示
7.表示はテンプレートを使えるので集約できる
こんな感じか?
http://shiflett.org/archive/171 の中程の図とだいたい同じになるしあってるとおもふ・・・
というか認証処理そのもに対応するFrameworkは無い?という事なのか?
それも含めて全自動だとおもっていて理解に時間がかかったよ
※まだ調べ間違いの可能性も高い
Zend_Controller
というか、概念が理解できなくて苦労した・・・http://framework.zend.com/roadmap/future/このクラスの基本はこれ
Controller: roadmap
Action : future
http://framework.zend.com/roadmap/
Controller: roadmap
Action : index
http://framework.zend.com/
Controller: index
Action : index
まず、mod_rewriteで/配下の全てがindex.phpに割り振られていることが基本。
そして URL/Contoller_name/Action という風に引数が定義される
定義されない場合はIndexになる
Zend_ControllerはこのContoller_nameとActionから適切なファイルを選択し実行する機能を提供している
言い方を変えれば、URLを元にダイナミックに実行するファイルを選択するクラス
なんでこんなクラスがいるのか?
おそらく、認証などすべてのファイルに共通の動作を、全てのファイルの先頭に書くのではなく1つのファイルにまとめて処理してから、実行しようということらしいMVCとしては標準概念かもしれないが、最初サンプルプリーズw
サンプルを解説
http://www.phparch.com/zftut/index.php?p=1フレーム
include 'Zend.php';//クラスのロード
Zend::loadClass('Zend_Controller_Action');
Zend::loadClass('Zend_Controller_Front');
//この位置に共通処理を書く
//たとえば、認証とか
//そして成功なら・・・
if(成功){
//Zend_Controllerの初期化
$controller = Zend_Controller_Front::getInstance();
$controller->setControllerDirectory('/path/to/controllers');
//実行
$controller->dispatch();
//この行でURIからhttp://URI/Controlle/function の引数を分解し
//path/to/controller配下のControlleクラスを読み出し
//functionを実行すると思われる
//失敗なら
}else{
//ログインページにでもジャンプさせる
header("Location: http://revilog.com/login.php");
}
そんで、'/path/to/controllers'配下に置くべきファイル
たとえば、htto;//URI/foo/bar
というURIでリクエストすると
FooController.phpが呼び出され
中の
class FooController extends Zend_Controller_Action
{
function index()
{
echo 'The path must be /foo';
}
function bar()
{
echo 'The path must be /foo/bar';
}
}
barが実行される
/foo/
ならば
indexが実行される
htto;//URI/foo/ならば
IndexController.php
の中の
class IndexController extends Zend_Controller_Action
{
function index()
{
echo 'index()';
}
function noRoute()
{
echo 'noRoute()';
}
}
indexが実行される
noRouteは該当するファイルが無い場合のデフォルト用
まとめ
■Zend_Controller は URIパラメータ http://URI/name1/name2 の2つのパラメータをキーに実行する関数を選択するディスパッチクラス■mod_rewriteと組み合わせることにより 共通処理->個別処理という流れを確実に記述できる
■速いか遅いかは不明。大したロスもなさげなので問題ないか?キャッシュ系との相性次第かも
■選択されるクラスはZend_Controller_Actionから派生させる。
■選択されるクラスはname1+Controller.phpというファイル名にする
■選択されるクラスはname1+Controllerというクラス名にする
■選択されるメソッドはname2と同じ名前。省略時はindex
こんな感じか?
Zend_View
http://framework.zend.com/manual/zend.view.htmlこちらは理解は簡単
$view = new Zend_View();
echo $view->render('file_name');
これはeval(file_name)やinclude(file_name)などと同様にfile_nameを評価して表示するだけ
特殊な動作はほとんどなし
ただし
<?php foreach ($this->books as $key => $val): ?>
などのように、thisという変数を親から受け取ることで表示に必要なデータを受け渡せる
単なるevalではグローバル変数すぎて使いにくい物をうまく、メンバ変数に落としている
