yii\web\UrlManager::createUrl PHP Method

createUrl() public method

You may specify the route as a string, e.g., site/index. You may also use an array if you want to specify additional query parameters for the URL being created. The array format must be: php generates: /index.php?r=site%2Findex¶m1=value1¶m2=value2 ['site/index', 'param1' => 'value1', 'param2' => 'value2'] If you want to create a URL with an anchor, you can use the array format with a # parameter. For example, php generates: /index.php?r=site%2Findex¶m1=value1#name ['site/index', 'param1' => 'value1', '#' => 'name'] The URL created is a relative one. Use UrlManager::createAbsoluteUrl to create an absolute URL. Note that unlike [[\yii\helpers\Url::toRoute()]], this method always treats the given route as an absolute route.
public createUrl ( string | array $params ) : string
$params string | array use a string to represent a route (e.g. `site/index`), or an array to represent a route with query parameters (e.g. `['site/index', 'param1' => 'value1']`).
return string the created URL
    public function createUrl($params)
    {
        $params = (array) $params;
        $anchor = isset($params['#']) ? '#' . $params['#'] : '';
        unset($params['#'], $params[$this->routeParam]);
        $route = trim($params[0], '/');
        unset($params[0]);
        $baseUrl = $this->showScriptName || !$this->enablePrettyUrl ? $this->getScriptUrl() : $this->getBaseUrl();
        if ($this->enablePrettyUrl) {
            $cacheKey = $route . '?';
            foreach ($params as $key => $value) {
                if ($value !== null) {
                    $cacheKey .= $key . '&';
                }
            }
            $url = $this->getUrlFromCache($cacheKey, $route, $params);
            if ($url === false) {
                $cacheable = true;
                foreach ($this->rules as $rule) {
                    /* @var $rule UrlRule */
                    if (!empty($rule->defaults) && $rule->mode !== UrlRule::PARSING_ONLY) {
                        // if there is a rule with default values involved, the matching result may not be cached
                        $cacheable = false;
                    }
                    if (($url = $rule->createUrl($this, $route, $params)) !== false) {
                        if ($cacheable) {
                            $this->setRuleToCache($cacheKey, $rule);
                        }
                        break;
                    }
                }
            }
            if ($url !== false) {
                if (strpos($url, '://') !== false) {
                    if ($baseUrl !== '' && ($pos = strpos($url, '/', 8)) !== false) {
                        return substr($url, 0, $pos) . $baseUrl . substr($url, $pos) . $anchor;
                    } else {
                        return $url . $baseUrl . $anchor;
                    }
                } else {
                    return "{$baseUrl}/{$url}{$anchor}";
                }
            }
            if ($this->suffix !== null) {
                $route .= $this->suffix;
            }
            if (!empty($params) && ($query = http_build_query($params)) !== '') {
                $route .= '?' . $query;
            }
            return "{$baseUrl}/{$route}{$anchor}";
        } else {
            $url = "{$baseUrl}?{$this->routeParam}=" . urlencode($route);
            if (!empty($params) && ($query = http_build_query($params)) !== '') {
                $url .= '&' . $query;
            }
            return $url . $anchor;
        }
    }

Usage Example

Beispiel #1
21
 public function createUrl($params)
 {
     $url = parent::createUrl($params);
     if ($this->enableAppendLang) {
         $url = MultilangHelper::addLangToUrl($url);
     }
     return $url;
 }
All Usage Examples Of yii\web\UrlManager::createUrl