Allow passing an array of keys/values to getUrl()

getUrl()을 호출할 때 파라미터 이름과 파라미터 값을 풀어서 각각의 파라미터로
넘길 필요 없이, 하나의 연관배열로 넘길 수 있도록 허용합니다.

    $args = array(
        'mid' => $mid,
        'document_srl' => $document_srl,
    );

    getUrl($args);

이 문법을 사용하면 맨 앞에 빈 문자열을 넘겼을 때와 마찬가지로 기존의 URL
파라미터들은 모두 초기화됩니다. 즉 아래와 동일한 효과입니다.

    getUrl('', 'mid', $mid, 'document_srl', $document_srl);

기존의 URL 파라미터들을 남겨놓으려면 기존 방식대로 풀어서 써야 합니다.
This commit is contained in:
Kijin Sung 2020-05-18 19:41:06 +09:00
parent 3430e21be4
commit 586f010f55
3 changed files with 53 additions and 34 deletions

View file

@ -1646,39 +1646,58 @@ class Context
$domain = null;
}
// Get URL parameters. If the first argument is '', reset existing parameters.
if (!self::$_get_vars || strval($args_list[0]) === '')
// Get existing parameters from the current request.
$get_vars = self::$_get_vars ? get_object_vars(self::$_get_vars) : array();
// If $args_list is not an array, reset it to an empty array.
if (!is_array($args_list))
{
$args_list = array();
}
// If the first argument is '', reset existing parameters.
if (strval($args_list[0]) === '')
{
array_shift($args_list);
$get_vars = array();
if(is_array($args_list) && strval($args_list[0]) === '')
{
array_shift($args_list);
}
}
elseif ($_SERVER['REQUEST_METHOD'] === 'GET')
{
$get_vars = get_object_vars(self::$_get_vars);
}
else
// Otherwise, only keep existing parameters that are safe.
elseif ($_SERVER['REQUEST_METHOD'] !== 'GET')
{
$preserve_vars = array('module', 'mid', 'act', 'page', 'document_srl', 'search_target', 'search_keyword');
$preserve_keys = array_combine($preserve_vars, array_fill(0, count($preserve_vars), true));
$get_vars = array_intersect_key(get_object_vars(self::$_get_vars), $preserve_keys);
$get_vars = array_intersect_key($get_vars, $preserve_keys);
}
// arrange args_list
for($i = 0, $c = count($args_list); $i < $c; $i += 2)
// If $args_list contains one array, reset existing parameters and use keys & values from $args_list.
if (is_array($args_list[0]) && count($args_list) == 1)
{
$key = $args_list[$i];
$val = trim($args_list[$i + 1]);
// If value is not set, remove the key
if(!isset($val) || !strlen($val))
foreach ($args_list[0] as $key => $val)
{
unset($get_vars[$key]);
continue;
$val = trim($val);
if ($val !== '')
{
$get_vars[$key] = $val;
}
}
}
// Otherwise, use alternating members of $args_list as keys and values, respectively.
else
{
$num_args = count($args_list);
for($i = 0; $i < $num_args; $i += 2)
{
$key = $args_list[$i];
$val = trim($args_list[$i + 1]);
if ($val === '')
{
unset($get_vars[$key]);
}
else
{
$get_vars[$key] = $val;
}
}
// set new variables
$get_vars[$key] = $val;
}
// remove vid, rnd