2009年10月26日

Zend Framework アクションコントローラの処理の流れ (フロー)

最近 Zend Framework に手を出しはじめてカコイイWEBアプリ作れたらいいなと目論んでいるところです。
Zend Framework というか、Frameworkというものを使うのもこれが初めてのような気がします。
と言うわけで散々既出かもしれませんが、Zend Framework でのアクションコントローラの処理の流れを調べてみました。
結果から示すと次のようになっています。

init() → preDispatch() → dammy1Action(){ _forward('dammy2Action'); } → postDispatch()

init() → preDispatch() → dammy2Action(){ _forward('dammy3Action'); } → postDispatch()

init() → preDispatch() → dammy3Action(){ _forward('dammy4Action'); } → postDispatch()



init() → preDispatch() → dammy[k-1]Action(){ _forward('dammy[k]Action'); } → postDispatch()

init() → preDispatch() → dammy[k]Action(){ _forward('dammy[k+1]Action'); } → postDispatch()




と言う感じです。上の図でdammy[k-1]とか、dammy[k]と書いていますが、これはもちろんパースエラーになります。

さらに、コントローラはこのように_forward($action)で遷移する際にアクションクラスのプロパティを初期化します。

実際には次のようなコードを用いて調べました。

<?php
require_once 'Zend/Controller/Action';
require_once MODEL_PATH . 'JsonResponseModel.php';
class FlowSurveyController extends Zend_Controller_Action
{
    public function init() {
        JsonResponseModel::addMessage('init');
    }
    public function preDispatch() {
        JsonResponseModel::addMessage('preDispatch');
    }
    public function postDispatch() {
        JsonResponseModel::addMessage('postDispatch');
    }
    public function dammy1Action() {
        $this->_forward('dammy2');
        JsonResponseModel::addMessage('dammy1');
    }
    public function dammy2Action() {
        $this->_forward('dammy3');
        JsonResponseModel::addMessage('dammy2');
    }
    public function dammy3Action() {
        JsonResponseModel::addMessage('dammy3');
    }
}

上のようなコントローラを作って動かしてみると、次のような出力を得ました。(実際はJSON形式で出力してましたがここでは割愛しました。)

"init",
"preDispatch",
"dammy1",
"postDispatch",

"init",
"preDispatch",
"dammy2",
"postDispatch",

"init",
"preDispatch",
"dammy3",
"postDispatch"





Posted by 匿名希望 at 05:14│Comments(0)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。