Spec-Zone.ru › Yii 2.0

Url Helper

  1. Получение общих URL-адресов
  2. Создание URL-адресов
  3. Запоминание URL-адресов
  4. Проверка относительных URL-адресов

Url helper предоставляет набор статических методов для управления URL-адресами.

Получение общих URL-адресов

Есть два метода, которые вы можете использовать для получения общих URL-адресов: домашний URL-адрес и базовый URL-адрес текущего запроса. Для получения домашнего URL-адреса используйте следующее:

$relativeHomeUrl = Url::home();
$absoluteHomeUrl = Url::home(true);
$httpsAbsoluteHomeUrl = Url::home('https');

Если параметр не передается, сгенерированный URL-адрес является относительным. Вы можете либо передать true для получения абсолютного URL-адреса для текущей схемы, либо явно указать схему (https, http).

Для получения базового URL-адреса текущего запроса используйте следующее:

$relativeBaseUrl = Url::base();
$absoluteBaseUrl = Url::base(true);
$httpsAbsoluteBaseUrl = Url::base('https');

Единственный параметр метода работает точно так же, как и для Url::home().

Создание URL-адресов

Для создания URL-адреса до заданного маршрута используйте метод Url::toRoute(). Метод использует yii\web\UrlManager для создания URL-адреса:

$url = Url::toRoute(['product/view', 'id' => 42]);

Вы можете указать маршрут в виде строки, например, site/index. Вы также можете использовать массив, если хотите указать дополнительные параметры запроса для создаваемого URL-адреса. Формат массива должен быть:

// generates: /index.php?r=site%2Findex&param1=value1&param2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']

Если вы хотите создать URL-адрес с якорем, вы можете использовать формат массива с параметром #. Например,

// generates: /index.php?r=site%2Findex&param1=value1#name
['site/index', 'param1' => 'value1', '#' => 'name']

Маршрут может быть абсолютным или относительным. Абсолютный маршрут имеет ведущий слеш (например, /site/index), а относительный маршрут — нет (например, site/index или index). Относительный маршрут будет преобразован в абсолютный по следующим правилам:

  • Если маршрут пустая строка, будет использоваться текущий маршрут;
  • Если маршрут вообще не содержит слешей (например, index), он считается идентификатором действия текущего контроллера и будет добавлен в начало к yii\web\Controller::$uniqueId;
  • Если маршрут не имеет ведущего слеша (например, site/index), он считается маршрутом, относительным к текущему модулю, и будет добавлен в начало к идентификатору уникальности модуля.

Начиная с версии 2.0.2, вы можете указать маршрут в терминах псевдонима. В этом случае псевдоним сначала будет преобразован в фактический маршрут, который затем будет преобразован в абсолютный маршрут в соответствии с вышеуказанными правилами.

Ниже приведены некоторые примеры использования этого метода:

// /index.php?r=site%2Findex
echo Url::toRoute('site/index');

// /index.php?r=site%2Findex&src=ref1#name
echo Url::toRoute(['site/index', 'src' => 'ref1', '#' => 'name']);

// /index.php?r=post%2Fedit&id=100     assume the alias "@postEdit" is defined as "post/edit"
echo Url::toRoute(['@postEdit', 'id' => 100]);

// http://www.example.com/index.php?r=site%2Findex
echo Url::toRoute('site/index', true);

// https://www.example.com/index.php?r=site%2Findex
echo Url::toRoute('site/index', 'https');

Существует еще один метод Url::to(), который очень похож на toRoute(). Единственное отличие заключается в том, что этот метод требует указания маршрута только в виде массива. Если задана строка, она будет обрабатываться как URL-адрес.

Первый аргумент может быть:

  • массивом: toRoute() будет вызван для генерации URL-адреса. Например: ['site/index'], ['post/index', 'page' => 2]. Обратитесь к toRoute() за дополнительной информацией о том, как указать маршрут.
  • строкой с ведущим @: она обрабатывается как псевдоним, и возвращается соответствующая строка с псевдонимом.
  • пустой строкой: будет возвращен текущий запрашиваемый URL;
  • обычной строкой: она будет возвращена как есть.

Когда $scheme указан (будь то строка или true), возвращается абсолютный URL-адрес с информацией о хосте (полученной из yii\web\UrlManager::$hostInfo). Если $url уже является абсолютным URL-адресом, его схема заменяется указанной.

Ниже приведены некоторые примеры использования:

// /index.php?r=site%2Findex
echo Url::to(['site/index']);

// /index.php?r=site%2Findex&src=ref1#name
echo Url::to(['site/index', 'src' => 'ref1', '#' => 'name']);

// /index.php?r=post%2Fedit&id=100     assume the alias "@postEdit" is defined as "post/edit"
echo Url::to(['@postEdit', 'id' => 100]);

// the currently requested URL
echo Url::to();

// /images/logo.gif
echo Url::to('@web/images/logo.gif');

// images/logo.gif
echo Url::to('images/logo.gif');

// http://www.example.com/images/logo.gif
echo Url::to('@web/images/logo.gif', true);

// https://www.example.com/images/logo.gif
echo Url::to('@web/images/logo.gif', 'https');

Начиная с версии 2.0.3, вы можете использовать yii\helpers\Url::current() для создания URL-адреса на основе текущего запрошенного маршрута и параметров GET. Вы можете изменить или удалить некоторые параметры GET или добавить новые, передав параметр $params методу. Например,

// assume $_GET = ['id' => 123, 'src' => 'google'], current route is "post/view"

// /index.php?r=post%2Fview&id=123&src=google
echo Url::current();

// /index.php?r=post%2Fview&id=123
echo Url::current(['src' => null]);
// /index.php?r=post%2Fview&id=100&src=google
echo Url::current(['id' => 100]);

Запоминание URL-адресов

Есть случаи, когда вам нужно запомнить URL-адрес и затем использовать его во время обработки одного из последовательных запросов. Это можно сделать следующим образом:

// Remember current URL 
Url::remember();

// Remember URL specified. See Url::to() for argument format.
Url::remember(['product/view', 'id' => 42]);

// Remember URL specified with a name given
Url::remember(['product/view', 'id' => 42], 'product');

В следующем запросе мы можем получить запомненный URL-адрес следующим образом:

$url = Url::previous();
$productUrl = Url::previous('product');

Проверка относительных URL-адресов

Чтобы определить, является ли URL-адрес относительным, то есть не содержит части информации о хосте, вы можете использовать следующий код:

$isRelative = Url::isRelative('test/it');

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc-2.0/guide-helper-url.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API