Ethna_Controller::_trigger_WWW
■呼び元
Ethna_Controller::trigger
/**
* フレームワークの処理を実行する(WWW)
*
* 引数$default_action_nameに配列が指定された場合、その配列で指定された
* アクション以外は受け付けない(指定されていないアクションが指定された
* 場合、配列の先頭で指定されたアクションが実行される)
*
* @access private
* @param mixed $default_action_name 指定のアクション名
* @param mixed $fallback_action_name アクション名が決定できなかった場合に実行されるアクション名
* @return mixed 0:正常終了 Ethna_Error:エラー
*/
function _trigger_WWW($default_action_name = "", $fallback_action_name = "")
{
// アクション名の取得
$action_name = $this->_getActionName($default_action_name, $fallback_action_name);
// アクション定義の取得
$action_obj =& $this->_getAction($action_name);
if (is_null($action_obj)) {
if ($fallback_action_name != “”) {
$this->logger->log(LOG_DEBUG, ‘undefined action [%s] -> try fallback action [%s]’, $action_name, $fallback_action_name);
$action_obj =& $this->_getAction($fallback_action_name);
}
if (is_null($action_obj)) {
return Ethna::raiseError(”undefined action [%s]”, E_APP_UNDEFINED_ACTION, $action_name);
} else {
$action_name = $fallback_action_name;
}
}
// アクション実行前フィルタ
for ($i = 0; $i < count($this->filter_chain); $i++) {
$r = $this->filter_chain[$i]->preActionFilter($action_name);
if ($r != null) {
$this->logger->log(LOG_DEBUG, ‘action [%s] -> [%s] by %s’, $action_name, $r, get_class($this->filter_chain[$i]));
$action_name = $r;
}
}
$this->action_name = $action_name;
// 言語設定
$this->_setLanguage($this->language, $this->system_encoding, $this->client_encoding);
// オブジェクト生成
$backend =& $this->getBackend();
$form_name = $this->getActionFormName($action_name);
$this->action_form =& new $form_name($this);
$this->action_form->setFormVars();
// バックエンド処理実行
$backend->setActionForm($this->action_form);
$session =& $this->getSession();
$session->restore();
$forward_name = $backend->perform($action_name);
// アクション実行後フィルタ
for ($i = count($this->filter_chain) - 1; $i >= 0; $i–) {
$r = $this->filter_chain[$i]->postActionFilter($action_name, $forward_name);
if ($r != null) {
$this->logger->log(LOG_DEBUG, ‘forward [%s] -> [%s] by %s’, $forward_name, $r, get_class($this->filter_chain[$i]));
$forward_name = $r;
}
}
// コントローラで遷移先を決定する(オプション)
$forward_name = $this->_sortForward($action_name, $forward_name);
if ($forward_name != null) {
$view_class_name = $this->getViewClassName($forward_name);
$this->view =& new $view_class_name($backend, $forward_name, $this->_getForwardPath($forward_name));
$this->view->preforward();
$this->view->forward();
}
return 0;
}
トラックバック URL :