Cml\Route::parsePathInfo PHP Method

parsePathInfo() public static method

解析url获取pathinfo
public static parsePathInfo ( ) : void
return void
    public static function parsePathInfo()
    {
        $urlModel = Config::get('url_model');
        $pathInfo = self::$pathInfo;
        if (empty($pathInfo)) {
            $isCli = Request::isCli();
            //是否为命令行访问
            if ($isCli) {
                isset($_SERVER['argv'][1]) && ($pathInfo = explode('/', $_SERVER['argv'][1]));
            } else {
                if ($urlModel === 1 || $urlModel === 2) {
                    //pathInfo模式(含显示、隐藏index.php两种)SCRIPT_NAME
                    if (isset($_GET[Config::get('var_pathinfo')])) {
                        $param = $_GET[Config::get('var_pathinfo')];
                    } else {
                        $param = preg_replace('/(.*)\\/(.*)\\.php(.*)/i', '\\1\\3', $_SERVER['REQUEST_URI']);
                        $scriptName = preg_replace('/(.*)\\/(.*)\\.php(.*)/i', '\\1', $_SERVER['SCRIPT_NAME']);
                        if (!empty($scriptName)) {
                            $param = substr($param, strpos($param, $scriptName) + strlen($scriptName));
                        }
                    }
                    $param = ltrim($param, '/');
                    if (!empty($param)) {
                        //无参数时直接跳过取默认操作
                        //获取参数
                        $pathInfo = explode(Config::get('url_pathinfo_depr'), trim(preg_replace(['/\\' . Config::get('url_html_suffix') . '/', '/\\&.*/', '/\\?.*/'], '', $param), Config::get('url_pathinfo_depr')));
                    }
                } elseif ($urlModel === 3 && isset($_GET[Config::get('var_pathinfo')])) {
                    //兼容模式
                    $urlString = $_GET[Config::get('var_pathinfo')];
                    unset($_GET[Config::get('var_pathinfo')]);
                    $pathInfo = explode(Config::get('url_pathinfo_depr'), trim(str_replace(Config::get('url_html_suffix'), '', ltrim($urlString, '/')), Config::get('url_pathinfo_depr')));
                }
            }
        }
        isset($pathInfo[0]) && empty($pathInfo[0]) && ($pathInfo = []);
        //参数不完整获取默认配置
        if (empty($pathInfo)) {
            $pathInfo = explode('/', trim(Config::get('url_default_action'), '/'));
        }
        self::$pathInfo = $pathInfo;
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * 解析url
  *
  * @return mixed
  */
 public function parseUrl()
 {
     $dispatcher = \FastRoute\simpleDispatcher(function (RouteCollector $r) {
         foreach ($this->routes as $route) {
             $r->addRoute($route['method'], $route['uri'], $route['action']);
         }
     });
     \Cml\Route::parsePathInfo();
     $httpMethod = isset($_POST['_method']) ? strtoupper($_POST['_method']) : strtoupper($_SERVER['REQUEST_METHOD']);
     $routeInfo = $dispatcher->dispatch($httpMethod, implode('/', \Cml\Route::getPathInfo()));
     switch ($routeInfo[0]) {
         case Dispatcher::NOT_FOUND:
         case Dispatcher::METHOD_NOT_ALLOWED:
             break;
         case Dispatcher::FOUND:
             $_GET += $routeInfo[2];
             if (is_callable($routeInfo[1])) {
                 call_user_func($routeInfo[1]);
                 Cml::cmlStop();
             }
             $this->parseUrlParams($routeInfo[1]);
             break;
     }
     return $dispatcher;
 }
All Usage Examples Of Cml\Route::parsePathInfo