选择语言 :

 Core_HttpIO::uri

获取新的URI

string Core_HttpIO::uri( [ array $params = null ] )
uses
Route::uri

参数列表

参数 类型 描述 默认值
$params array Additional route parameters null
返回值
  • string
File: ./core/classes/httpio.class.php
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);
    }
}