Оглавление

Введение Первое знакомство Структура приложения Обработка запросов Основные понятия Работа с базами данных Получение данных от пользователя Отображение данных Безопасность Кеширование Веб-сервисы REST Тестирование Специальные темы Виджеты Хелперы
Зачем реклама?

Url хелпер

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

Получение общих URL #

Вы можете использовать два метода получения общих URL: домашний URL (Home) и базовый URL (Base) текущего запроса. Используйте следующий код, чтобы получить домашний 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. Формат массива должен быть следующим:

// сгенерирует: /index.php?r=site/index&param1=value1&param2=value2
['site/index''param1' => 'value1''param2' => 'value2']

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

// сгенерирует: /index.php?r=site/index&param1=value1#name
['site/index''param1' => 'value1''#' => 'name']

Роут может быть и абсолютным, и относительным. Абсолютный URL начинается со слеша (например, /site/index), относительный - без (например, site/index or index). Относительный URL будет сконвертирован в абсолютный по следующим правилам:

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

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

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

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

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

// /index.php?r=post/edit&id=100     псевдоним "@postEdit" задан как "post/edit"
echo Url::toRoute(['@postEdit''id' => 100]);

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

// https://www.example.com/index.php?r=site/index
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 указан протокол, то его значение будет заменено.

Пример использования:

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

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

// /index.php?r=post/edit&id=100     псевдоним "@postEdit" задан как "post/edit"
echo Url::to(['@postEdit''id' => 100]);

// Текущий 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. Например:

// предположим $_GET = ['id' => 123, 'src' => 'google'], а текущий роут "post/view"

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

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

Запоминание URL #

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

// Запомнить текущий URL
Url::remember();

// Запомнить определенный URL. Входные параметры смотрите на примере Url::to().
Url::remember(['product/view''id' => 42]);

// Запомнить URL под определенным именем
Url::remember(['product/view''id' => 42], 'product');

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

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

Проверить относительность URL #

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

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

Зачем реклама?