Ethna_Controller::_getActionName_Form
■呼び元
Ethna_Controller::_getActionName
/**
* フォームにより要求されたアクション名を返す
*
* アプリケーションの性質に応じてこのメソッドをオーバーライドして下さい。
* デフォルトでは"action_"で始まるフォーム値の"action_"の部分を除いたもの
* ("action_sample"なら"sample")がアクション名として扱われます
*
* @access protected
* @return string フォームにより要求されたアクション名
*/
function _getActionName_Form()
{
if (isset($_SERVER['REQUEST_METHOD']) == false) {
return null;
}
$url_handler =& $this->getUrlHandler();
if ($_SERVER[’REQUEST_METHOD’] == “GET”) {
$tmp_vars = $_GET;
} else if ($_SERVER[’REQUEST_METHOD’] == “POST”) {
$tmp_vars = $_POST;
}
if (empty($_SERVER[’URL_HANDLER’]) == false) {
$tmp_vars[’__url_handler__’] = $_SERVER[’URL_HANDLER’];
$tmp_vars[’__url_info__’] = isset($_SERVER[’PATH_INFO’]) ? $_SERVER[’PATH_INFO’] : null;
$tmp_vars = $url_handler->requestToAction($tmp_vars);
if ($_SERVER[’REQUEST_METHOD’] == “GET”) {
$_GET = array_merge($_GET, $tmp_vars);
} else if ($_SERVER[’REQUEST_METHOD’] == “POST”) {
$_POST = array_merge($_POST, $tmp_vars);
}
$_REQUEST = array_merge($_REQUEST, $tmp_vars);
}
if (strcasecmp($_SERVER[’REQUEST_METHOD’], ‘post’) == 0) {
$http_vars =& $_POST;
} else {
$http_vars =& $_GET;
}
// フォーム値からリクエストされたアクション名を取得する
$action_name = $sub_action_name = null;
foreach ($http_vars as $name => $value) {
if ($value == “” || strncmp($name, ‘action_’, 7) != 0) {
continue;
}
$tmp = substr($name, 7);
// type=”image”対応
if (preg_match(’/_x$/’, $name) || preg_match(’/_y$/’, $name)) {
$tmp = substr($tmp, 0, strlen($tmp)-2);
}
// value=”dummy”となっているものは優先度を下げる
if ($value == “dummy”) {
$sub_action_name = $tmp;
} else {
$action_name = $tmp;
}
}
if ($action_name == null) {
$action_name = $sub_action_name;
}
return $action_name;
}