ホーム > タグ > ZFチュートリアル
ZFチュートリアル
ZFチュートリアル Zend_Controller編 (3) 基本
- 2009-12-28 (月)
- Zend Framework
Zend_Controller の処理の流れは、 いくつかの部品にわかれ実装されています。
処理の概要を知っておくことは有用です。
Zend_Controller_Front
Zend_Controller の処理全体を取りまとめます。FrontControllerパターンであるといえます。
サーバから受け取ったすべてのリクエストを Zend_Controller_Front が処理し、最終的にリクエストを
ActionController (Zend_Controller_Action) に委譲します。
Zend_Controller_Request_Abstract
リクエスト環境を表し、コントローラ名やアクション名 そしてリクエストパラメータを設定したり取得したりする機能を提供します。
さらに、アクションが Zend_Controller_Dispatcher でディスパッチされたかどうかを追跡する機能もあります。
この抽象リクエストオブジェクトを拡張し、 リクエスト情報をカプセル化します。
それによって、 ルータはリクエストの情報を取得して コントローラとアクションを決定できるようになります。
デフォルトでは Zend_Controller_Request_Http が用いられます。
これは、HTTP リクエスト環境全体へのアクセス機能を提供します。
Zend_Controller_Router_Interface
こちらを使用してルータを定義します。ルーティングとは、リクエストの内容を調べて、
そのリクエストを処理するコントローラとアクションを決定する処理のことです。
このコントローラとアクション、そしてリクエストパラメータがリクエストオブジェクトに設定され、
Zend_Controller_Dispatcher_Standard で処理されます。
ルーティングが発生するのは一度だけ、 つまり最初にリクエストを受け取ってから 最初のコントローラにディスパッチされるまでの間だけです。
デフォルトのルータである Zend_Controller_Router_Rewrite は、 Zend_Controller_Request_Http で指定された
URI を受け取ってそれを分解し、コントローラや アクション、そして URL に含まれたパスのパラメータを取得します。
たとえば、http://localhost/foo/bar/key/value のような URL の場合は
foo がコントローラ、 bar がアクション、そしてパラメータ key の値として value を取得します。
Zend_Controller_Router_Rewrite は、任意のパスにマッチさせることもできます。
Zend_Controller_Dispatcher_Interface
こちらを使用してディスパッチャを定義します。ディスパッチとは、 コントローラとアクションをリクエストオブジェクトから受け取り、
それを実際のコントローラファイル/クラスとメソッドに対応させる処理のことです。
コントローラやアクションが存在しない場合は、 デフォルトのコントローラやアクションにディスパッチします。
実際のディスパッチ処理では、 コントローラクラスのインスタンスの作成と そのクラスのアクションメソッドのコールを行います。
ルーティングは一度しか発生しませんが、 それとは異なりディスパッチは繰り返し発生します。
リクエストオブジェクトのディスパッチ状態がリセットされるとループが再開され、 現在リクエストオブジェクトに設定されているアクションが
コールされます。 リクエストオブジェクトのディスパッチ状態が (TRUE に) 設定された状態でループが終了すると、処理が終了します。
デフォルトのディスパッチャは Zend_Controller_Dispatcher_Standard です。
これは、MixedCasedClasses 形式の名前の最後に Controller がついたクラスをコントローラとして使用し、
アクションメソッドの名前は camelCasedMethods 形式 (最後に Action をつける) となります。
たとえば FooController::barAction() のような場合、コントローラは foo、アクションは bar となります。
Zend_Controller_Action
コントローラの基底コンポーネントです。 各コントローラはこの Zend_Controller_Action クラスを継承して作成します。
このクラスではアクションメソッドを定義します。
Zend_Controller_Response_Abstract
基底レスポンスクラスで、アクションコントローラからの応答内容を収集し、 それをレスポンスとして返します。これはヘッダと本文の両方を収集します。
デフォルトのレスポンスクラスは Zend_Controller_Response_Http で、 これは HTTP 環境での使用に適しています。
まとめ
Zend_Controller の処理の流れは比較的シンプルです。 Zend_Controller_Front がリクエストを受け取り、
Zend_Controller_Router_Rewrite をコールして、 配送先となるコントローラ (そしてコントローラ内のアクション) を決定します。
Zend_Controller_Router_Rewrite は URI を分解し、リクエストからコントローラ名とアクション名を取得します。
その後、Zend_Controller_Front はディスパッチループに突入します。 まず Zend_Controller_Dispatcher_Standard を
コールしてそこにリクエストを渡し、 リクエストで指定されたコントローラとアクションを取得します (あるいはデフォルトを使用します)。
コントローラが終了すると、処理は Zend_Controller_Front に戻ります。リクエストのディスパッチ状態がリセットされ、
別のコントローラをディスパッチするように指示された場合は、 ループが続けられて次の配送処理が行われます。
それ以外の場合は、処理がそこで終了します。それ以外の場合は、 処理が終了します。
ZFチュートリアル目次
http://yaegassy.jp/zend-framework.html#4
タグ: Framework, Zend, ZFチュートリアル
- Comments: 0
- Trackbacks: 0
ZFチュートリアル Zend_Controller編 (2) ファイル説明
- 2009-12-28 (月)
- Zend Framework
Version 1.9.6のZend_Controllerを解剖してみます。
Zend_Controller (Ver.1.9.6)
ファイル数: 50ファイル
※拡張子がないものはディレクトリになります。
Action -- Exception.php -- Helper ---- Abstract.php ---- ActionStack.php ---- AjaxContext.php ---- AutoComplete ------ Abstract.php ---- AutoCompleteDojo.php ---- AutoCompleteScriptaculous.php ---- ContextSwitch.php ---- FlashMessenger.php ---- Json.php ---- Redirector.php ---- Url.php ---- ViewRenderer.php -- HelperBroker ---- PriorityStack.php HelperBroker.php Interface.php Action.php Dispatcher -- Abstract.php -- Exception.php -- Interface.php -- Standard.php Exception.php Front.php Plugin -- Abstract.php -- ActionStack.php -- Broker.php -- ErrorHandler.php -- PutHandler.php Request -- Abstract.php -- Apache404.php -- Exception.php -- Http.php -- HttpTestCase.php -- Simple.php Response -- Abstract.php -- Cli.php -- Exception.php -- Http.php -- HttpTestCase.php Router -- Abstract.php -- Exception.php -- Interface.php -- Rewrite.php -- Route ---- Abstract.php ---- Chain.php ---- Hostname.php ---- Interface.php ---- Module.php ---- Regex.php ---- Static.php
ZFチュートリアル目次
http://yaegassy.jp/zend-framework.html#4
タグ: Framework, PHP, Zend, ZFチュートリアル
- Comments: 0
- Trackbacks: 0
ZFチュートリアル Zend_Controller編 (1) はじめに
- 2009-12-28 (月)
- Zend Framework
Zend_ControllerはZend Framework の MVC システムの中心となるものです。
Zend_Controller_Front は フロントコントローラ パターンを実装しており、 すべてのリクエストをいったんフロントコントローラで受け取った上でその URL にもとづいたアクションコントローラに配送します。
Zend_Controller は、拡張性を考慮して作成されています。
拡張方法は下記の二つがあります。
- 既存のクラスのサブクラスを作成する
- アクションヘルパーを作成する
新しいサブクラスを作成すると、コントローラクラスの基盤となる インターフェイスや機能を新たに書くことができます。 アクションヘルパーを使用すると、システムの機能を強化したり変更したりできるようになります。
Zend_Controllerの構造
フロントコントローラー
全てのリクエストを受け付け、処理を各機能に依頼し、レスポンスを返す
ルータ
リクエスト内容から処理の手順を決める
ディスパッチャ
処理を担当するアクションコントローラーを決め、アクションコントローラーを呼び出す
アクションコントローラー
実施の処理を行うビジネスロジックと呼ばれる部分
リクエストオブジェクト
リクエストされた全ての情報を管理する
レスポンスオブジェクト
レスポンスする全ての情報を管理する
アクションヘルパー
アクションコントローラーに機能を追加する
プラグイン
イベント発生時に処理を追加する
標準的なディレクトリ構成
application ---------------- アプリケーションディレクトリ ┣controllers -------------- コントローラディレクトリ ┃┣IndexController -------- アクションコントローラ ┃models ------------------- モデルディレクトリ ┃views -------------------- ビューディレクトリ ┃┗scripts ---------------- ビュースクリプトディレクトリ ┃__┗index ---------------- コントローラ名 ┃____┗index.phtml -------- ビュースクリプト(アクション名 + .phtml) html ----------------------- 公開ディレクトリ ┣.htaccess ---------------- 全てのリクエストをindex.phpに渡す設定 ┗index.php ---------------- フロントコントローラ
rewrite ルールの作成
上のレイアウトの html/.htaccess ファイルを、次のように編集します。
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ index.php [NC,L]
ZFチュートリアル目次
http://yaegassy.jp/zend-framework.html#4
タグ: Framework, PHP, Zend, ZFチュートリアル
- Comments: 0
- Trackbacks: 0
Home > Tags > ZFチュートリアル
-
-
- satoruyoshidaの日記
- WEB RHODIA
- GWSメモ
- Lord of the Phantom
- Akra's DevNotes
- ZF Snippets
- Rob Allen's DevNotes
- 例えば、PHPを使う
- ありがとう。また会おう。
- popowa
- Nullyのぶろぐ
- 携帯サイト開発を極める!開発チームリーダーのブログ
- Phly, boy, phly
- noopな日々
- Heavens hell
- Live Commerce
- Digitalus CMS
- ZendCasts
- Zend Framework Tutorial
- Devel::Bayside
- twk @ ふらっと
- へっぽこ開発室
- 田舎っぺWeb関係者の日記


