Ethnaのソースコードを読み解く 第5回 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()関数を実行しているだけのようです。
つづく
カテゴリ:
Ethna