Url Helper
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¶m1=value1¶m2=value2 ['site/index', 'param1' => 'value1', 'param2' => 'value2']
Если вы хотите создать URL-адрес с якорем, вы можете использовать формат массива с параметром #. Например,
// generates: /index.php?r=site%2Findex¶m1=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