framework/web/UrlRule.php
public function parseRequest($manager, $request)
    {
        if ($this->mode === self::CREATION_ONLY) {
            return false;
        }

        if (!empty($this->verb) && !in_array($request->getMethod(), $this->verb, true)) {
            return false;
        }

        $suffix = (string) ($this->suffix === null ? $manager->suffix : $this->suffix);
        $pathInfo = $request->getPathInfo();
        $normalized = false;
        if ($this->hasNormalizer($manager)) {
            $pathInfo = $this->getNormalizer($manager)->normalizePathInfo($pathInfo, $suffix, $normalized);
        }
        if ($suffix !== '' && $pathInfo !== '') {
            $n = strlen($suffix);
            if (substr_compare($pathInfo, $suffix, -$n, $n) === 0) {
                $pathInfo = substr($pathInfo, 0, -$n);
                if ($pathInfo === '') {
                    // suffix alone is not allowed
                    return false;
                }
            } else {
                return false;
            }
        }

        if ($this->host !== null) {
            $pathInfo = strtolower($request->getHostInfo()) . ($pathInfo === '' ? '' : '/' . $pathInfo);
        }

        if (!preg_match($this->pattern, $pathInfo, $matches)) {
            return false;
        }
        $matches = $this->substitutePlaceholderNames($matches);

        foreach ($this->defaults as $name => $value) {
            if (!isset($matches[$name]) || $matches[$name] === '') {
                $matches[$name] = $value;
            }
        }
        $params = $this->defaults;
        $tr = [];
        foreach ($matches as $name => $value) {
            if (isset($this->_routeParams[$name])) {
                $tr[$this->_routeParams[$name]] = $value;
                unset($params[$name]);
            } elseif (isset($this->_paramRules[$name])) {
                $params[$name] = $value;
            }
        }
        if ($this->_routeRule !== null) {
            $route = strtr($this->route, $tr);
        } else {
            $route = $this->route;
        }

        Yii::debug("Request parsed with URL rule: {$this->name}", __METHOD__);

        if ($normalized) {
            // pathInfo was changed by normalizer - we need also normalize route
            return $this->getNormalizer($manager)->normalizeRoute([$route, $params]);
        }

        return [$route, $params];
    }
public function parseRequest($manager, $request)
    {
        if ($this->mode === self::CREATION_ONLY) {
            return false;
        }

        if (!empty($this->verb) && !in_array($request->getMethod(), $this->verb, true)) {
            return false;
        }

        $suffix = (string) ($this->suffix === null ? $manager->suffix : $this->suffix);
        $pathInfo = $request->getPathInfo();
        $normalized = false;
        if ($this->hasNormalizer($manager)) {
            $pathInfo = $this->getNormalizer($manager)->normalizePathInfo($pathInfo, $suffix, $normalized);
        }
        if ($suffix !== '' && $pathInfo !== '') {
            $n = strlen($suffix);
            if (substr_compare($pathInfo, $suffix, -$n, $n) === 0) {
                $pathInfo = substr($pathInfo, 0, -$n);
                if ($pathInfo === '') {
                    // suffix alone is not allowed
                    return false;
                }
            } else {
                return false;
            }
        }

        if ($this->host !== null) {
            $pathInfo = strtolower($request->getHostInfo()) . ($pathInfo === '' ? '' : '/' . $pathInfo);
        }

        if (!preg_match($this->pattern, $pathInfo, $matches)) {
            return false;
        }
        $matches = $this->substitutePlaceholderNames($matches);

        foreach ($this->defaults as $name => $value) {
            if (!isset($matches[$name]) || $matches[$name] === '') {
                $matches[$name] = $value;
            }
        }
        $params = $this->defaults;
        $tr = [];
        foreach ($matches as $name => $value) {
            if (isset($this->_routeParams[$name])) {
                $tr[$this->_routeParams[$name]] = $value;
                unset($params[$name]);
            } elseif (isset($this->_paramRules[$name])) {
                $params[$name] = $value;
            }
        }
        if ($this->_routeRule !== null) {
            $route = strtr($this->route, $tr);
        } else {
            $route = $this->route;
        }

        Yii::debug("Request parsed with URL rule: {$this->name}", __METHOD__);

        if ($normalized) {
            // pathInfo was changed by normalizer - we need also normalize route
            return $this->getNormalizer($manager)->normalizeRoute([$route, $params]);
        }

        return [$route, $params];
    }
public function parseRequest ( $ manager , $ request ) { if ( $ this -> mode === self :: CREATION_ONLY ) { return false ; } if ( ! empty ( $ this -> verb ) && ! in_array ( $ request -> getMethod ( ) , $ this -> verb , true ) ) { return false ; } $ suffix = ( string ) ( $ this -> suffix === null ? $ manager -> suffix : $ this -> suffix ) ; $ pathInfo = $ request -> getPathInfo ( ) ; $ normalized = false ; if ( $ this -> hasNormalizer ( $ manager ) ) { $ pathInfo = $ this -> getNormalizer ( $ manager ) -> normalizePathInfo ( $ pathInfo , $ suffix , $ normalized ) ; } if ( $ suffix !== '' && $ pathInfo !== '' ) { $ n = strlen ( $ suffix ) ; if ( substr_compare ( $ pathInfo , $ suffix , - $ n , $ n ) === 0 ) { $ pathInfo = substr ( $ pathInfo , 0 , - $ n ) ; if ( $ pathInfo === '' ) { // suffix alone is not allowed return false ; } } else { return false ; } } if ( $ this -> host !== null ) { $ pathInfo = strtolower ( $ request -> getHostInfo ( ) ) . ( $ pathInfo === '' ? '' : '/' . $ pathInfo ) ; } if ( ! preg_match ( $ this -> pattern , $ pathInfo , $ matches ) ) { return false ; } $ matches = $ this -> substitutePlaceholderNames ( $ matches ) ; foreach ( $ this -> defaults as $ name => $ value ) { if ( ! isset ( $ matches [ $ name ] ) || $ matches [ $ name ] === '' ) { $ matches [ $ name ] = $ value ; } } $ params = $ this -> defaults ; $ tr = [ ] ; foreach ( $ matches as $ name => $ value ) { if ( isset ( $ this -> _routeParams [ $ name ] ) ) { $ tr [ $ this -> _routeParams [ $ name ] ] = $ value ; unset ( $ params [ $ name ] ) ; } elseif ( isset ( $ this -> _paramRules [ $ name ] ) ) { $ params [ $ name ] = $ value ; } } if ( $ this -> _routeRule !== null ) { $ route = strtr ( $ this -> route , $ tr ) ; } else { $ route = $ this -> route ; } Yii :: debug ( "Request parsed with URL rule: {$this->name}" , __METHOD__ ) ; if ( $ normalized ) { // pathInfo was changed by normalizer - we need also normalize route return $ this -> getNormalizer ( $ manager ) -> normalizeRoute ( [ $ route , $ params ] ) ; } return [ $ route , $ params ] ; }
Parses the given request and returns the corresponding route and parameters.
@param UrlManager $manager the URL manager
@param Request $request the request component
@return array|bool the parsing result. The route and the parameters are returned as an array.
If `false`, it means this rule cannot be used to parse this path info.
Parses the given request and returns the corresponding route and parameters .