Yii2 translated behavior
Это расширение поможет вам быстро добавить возможность перевода вашего сайта.
Это расширение поможет вам быстро добавить возможность перевода вашего сайта.
Хелпер 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::toRoute()
. Метод использует [[\yii\web\UrlManager]].
Для того чтобы создать URL:
$url = Url::toRoute(['product/view', 'id' => 42]);
Вы можете задать роут строкой, например, site/index
. А также вы можете использовать массив, если хотите задать
дополнительные параметры запроса для URL. Формат массива должен быть следующим:
// сгенерирует: /index.php?r=site/index¶m1=value1¶m2=value2
['site/index', 'param1' => 'value1', 'param2' => 'value2']
Если вы хотите создать URL с якорем, то вы можете использовать параметр массива с ключом #
. Например:
// сгенерирует: /index.php?r=site/index¶m1=value1#name
['site/index', 'param1' => 'value1', '#' => 'name']
Роут может быть и абсолютным, и относительным. Абсолютный URL начинается со слеша (например, /site/index
),
относительный - без (например, site/index
or index
). Относительный URL будет сконвертирован в абсолютный по следующим
правилам:
index
), то он будет считаться экшеном текущего контроллера и будет определен
с помощью [[\yii\web\Controller::uniqueId]];site/index
), то он будет считаться относительным роутом текущего модуля
и будет определен с помощью [[\yii\base\Module::uniqueId|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.
Первый аргумент может быть:
['site/index']
, ['post/index', 'page' => 2]
.
В разделе [[toRoute()]] подробно описано как задавать роут;@
, будет обработана как псевдоним. Будет возвращено соответствующее значение псевдонима;Когда у метода задан второй параметр $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::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 или нет (например, если в нем не содержится информации о хосте), вы можете использовать следующий код:
$isRelative = Url::isRelative('test/it');