Ethnaのソースコードを読み解く 第5回 Ethna_Controller::trigger

Ethna_Controller::trigger

    function trigger($default_action_name = "", $fallback_action_name = "", $enable_filter = true)
    {
        // フィルターの生成
        if ($enable_filter) {
            $this->_createFilterChain();
        }

        // 実行前フィルタ
        for ($i = 0; $i < count($this->filter_chain); $i++) {
            $r = $this->filter_chain[$i]->preFilter();
            if (Ethna::isError($r)) {
                return $r;
            }
        }

        // trigger
        switch ($this->getGateway()) {
        case GATEWAY_WWW:
            $this->_trigger_WWW($default_action_name, $fallback_action_name);
            break;
        case GATEWAY_CLI:
            $this->_trigger_CLI($default_action_name);
            break;
        case GATEWAY_XMLRPC:
            $this->_trigger_XMLRPC();
            break;
        case GATEWAY_SOAP:
            $this->_trigger_SOAP();
            break;
        }

        // 実行後フィルタ
        for ($i = count($this->filter_chain) - 1; $i >= 0; $i--) {
            $r = $this->filter_chain[$i]->postFilter();
            if (Ethna::isError($r)) {
                return $r;
            }
        }
    }
この関数、ちょっと長いので短くしてみましょう。

実はちょっとはしょりましたが、$this->getGateway() は "GATEWAY_WWW"という文字列を返します。
これでswitch文は簡単になります。


また連載1回目でも触れましたが、この連載では「フィルタ、CLI,XMLRPC, SOAPなどには触れない」ことにしています。
よって、「なんとかフィルタ」と書いてある部分はばっさり削除できます。
実際、Sampleプロジェクトではフィルタを定義してないので、この部分は不要です。

不要部分を削除するとこうなります。
    function trigger($default_action_name = "", $fallback_action_name = "", $enable_filter = true)
    {
            $this->_trigger_WWW($default_action_name, $fallback_action_name);
    }

実際の値を放り込むとこうなります。
    function trigger('index',  "",  true)
    {
            $this->_trigger_WWW('index',  "");
    }
シンプルですね。
_trigger_WWW()関数を実行しているだけのようです。

つづく
カテゴリ: