レビログ

レビログ

独断と偏見で、ありとあらゆる物(主にライトノベル・コミック・アニメ・Geekネタ)のレビューを偽った感想を書いてるBlog=レビュー+ブログ=レビログ
2006年0311

Zend Frameworkについて調べた No.1

Zend Frameworkについて調べた。というかドキュメントが少なすぎてわかりにくい・・・
とりあえずMVCの基本になるZend_ControllerZend_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ではグローバル変数すぎて使いにくい物をうまく、メンバ変数に落としている



関連するエントリ一覧




other



■ 2006年03月11日 04:48  | トラックバック( 1 )件  | コメント( 0 )件
このエントリーを含むはてなブックマーク カテゴリ[program)プログラム] 

トラックバック

このエントリーのトラックバックURL:

同じ作品に対するトラックバック歓迎中
言及リンクはしてくれると助かりますが、なくてもかまいません。


» Zend Frameworkを試す(その4:ActionController) from Blog::Trapple::Net
次にアクションコントローラーを追加していきます。 例えば/foo/にアクセスした... [続きを読む]

トラックバック時刻: 2006年05月16日 19:41

コメント一覧

心は萌え(管理人)(--)『

お気軽にコメント下さい。ただし、基本的に読んではいますが、お返事はほとんどしません。お返事が必要な方はTOPページにあるメールアドレスへメールを送って下さい。

 

コメントしてください




保存しますか?