获取新的URI
string Core_HttpIO::uri( [ array $params = null ] )
参数列表
参数 类型 描述 默认值 $params
array
Additional route parameters null
string
public static function uri(array $params = null)
{
$params_array = HttpIO::param();
if (null===Core_Route::$current_route)
{
$tmpstr = array();
if ($params_array['directory'])
{
$tmpstr[] = $params_array['directory'];
}
# 记录控制器和action的序号
$controller_index = $action_index = null;
if ($params_array['controller'])
{
$controller = strtolower($params_array['controller']);
if (preg_match('#^Library_[a-z0-9]+_[a-z0-9]+_([a-z0-9_]+)$#i', $params_array['controller'], $m))
{
# 类库中的控制器
$controller = $m[1];
}
$pos = strrpos($controller, '_');
if (false!==$pos)
{
$controller = substr($controller, $pos + 1);
}
$controller_index = count($tmpstr);
if ($controller!='default')
{
$tmpstr[] = $controller;
}
}
$action = strtolower(substr($params_array['action'] , 7)); // Action_Abc -> abc
if ($action && $action!='default')
{
$action_index = count($tmpstr);
$tmpstr[] = $action;
}
if ($params)
{
foreach ($params as $k=>$v)
{
$params_array['arguments'][$k] = $v;
}
}
if ($params_array['arguments'])
{
foreach ($params_array['arguments'] as $v)
{
$tmpstr[] = $v;
}
}
$count = count($tmpstr);
for($i=$count-1; $i>=0; $i--)
{
if ($tmpstr[$i]==='' || null===$tmpstr[$i])
{
unset($tmpstr[$i]);
}
elseif ($tmpstr[$i]=='index')
{
if ($i===$action_index)
{
unset($tmpstr[$i]);
}
elseif ($i===$controller_index)
{
unset($tmpstr[$i]);
}
else
{
break;
}
}
else
{
break;
}
}
return rtrim(implode('/', $tmpstr), '/') . '/';
}
else
{
if (!isset($params['directory']))
{
// Add the current directory
$params['directory'] = $params_array['directory'];
}
if (!isset($params['controller']))
{
// Add the current controller
$params['controller'] = $params_array['controller'];
}
if (!isset($params['action']))
{
// Add the current action
$params['action'] = $params_array['action'];
}
// Add the current parameters
$params += $params_array;
return Core::route()->uri($params);
}
}