Псевдонимы

Псевдонимы используются для обозначения путей к файлам или URL адресов и помогают избежать использования абсолютных путей или URL в коде. Для того, чтобы не перепутать псевдоним с обычным путём к файлу или URL, он должен начинаться с @. В Yii имеется множество заранее определённых псевдонимов. Например, @yii указывает на директорию, в которую был установлен Yii framework, а @web можно использовать для получения базового URL текущего приложения.

Создание псевдонимов

Для создания псевдонима пути к файлу или URL используется метод Yii::setAlias():

// псевдоним пути к файлу
Yii::setAlias('@foo', '/path/to/foo');

// псевдоним URL
Yii::setAlias('@bar', 'http://www.example.com');

// псевдоним конкретного файла, содержащего класс \foo\Bar
Yii::setAlias('@foo/Bar.php', '/definitely/not/foo/Bar.php');

Note: псевдоним пути к файлу или URL не обязательно указывает на существующий файл или ресурс.

Используя уже заданный псевдоним, вы можете получить на основе него новый без вызова Yii::setAlias(). Сделать это можно, добавив в его конец /, за которым следует один или более сегментов пути. Псевдонимы, определённые при помощи Yii::setAlias(), являются корневыми псевдонимами, в то время как полученные из них называются производными псевдонимами. К примеру, @foo является корневым псевдонимом, а @foo/bar/file.php — производным.

Вы можете задать новый псевдоним, используя ранее созданный псевдоним (не важно, корневой он или производный):

Yii::setAlias('@foobar', '@foo/bar');

Корневые псевдонимы, как правило, создаются на этапе предварительной загрузки (bootstrapping). Например, вы можете вызвать Yii::setAlias() в входном скрипте. Для удобства, в приложении (Application) предусмотрено свойство aliases, которое можно задать через конфигурацию приложения:

return [
    // ...
    'aliases' => [
        '@foo' => '/path/to/foo',
        '@bar' => 'http://www.example.com',
    ],
];

Преобразование псевдонимов

Метод Yii::getAlias() преобразует корневой псевдоним в путь к файлу или URL, который этот псевдоним представляет. Этот же метод может работать и с производными псевдонимами:

echo Yii::getAlias('@foo');               // выведет: /path/to/foo
echo Yii::getAlias('@bar');               // выведет: http://www.example.com
echo Yii::getAlias('@foo/bar/file.php');  // выведет: /path/to/foo/bar/file.php

Путь или URL, представленный производным псевдонимом, определяется путём замены в нём части, соответствующей корневому псевдониму, на соответствующий ему путь или URL.

Note: Метод Yii::getAlias() не проверяет фактического существования получаемого пути или URL.

Корневой псевдоним может содержать знаки '/'. При этом метод Yii::getAlias() корректно определит, какая часть псевдонима является корневой и верно сформирует путь или URL:

Yii::setAlias('@foo', '/path/to/foo');
Yii::setAlias('@foo/bar', '/path2/bar');
Yii::getAlias('@foo/test/file.php');  // выведет: /path/to/foo/test/file.php
Yii::getAlias('@foo/bar/file.php');   // выведет: /path2/bar/file.php

Если бы @foo/bar не был объявлен корневым псевдонимом, последняя строка вывела бы /path/to/foo/bar/file.php.

Использование псевдонимов

Псевдонимы распознаются во многих частях Yii без необходимости предварительно вызывать Yii::getAlias() для получения пути или URL. Например, yii\caching\FileCache::$cachePath принимает как обычный путь к файлу, так и псевдоним пути благодаря префиксу @, который позволяет их различать.

use yii\caching\FileCache;

$cache = new FileCache([
    'cachePath' => '@runtime/cache',
]);

Для того, чтобы узнать поддерживает ли метод или свойство псевдонимы, обратитесь к документации API.

Заранее определённые псевдонимы

В Yii заранее определены псевдонимы для часто используемых путей к файлам и URL:

  • @yii: директория, в которой находится файл BaseYii.php (директория фреймворка).
  • @app: yii\base\Application::basePath текущего приложения.
  • @runtime: yii\base\Application::runtimePath текущего приложения.
  • @vendor: yii\base\Application::vendorPath.
  • @webroot: вебрут текущего веб приложения (там где находится входной скрипт index.php).
  • @web: базовый URL текущего приложения.

Псевдоним @yii задаётся в момент подключения файла Yii.php во входном скрипте. Остальные псевдонимы задаются в конструкторе приложения в момент применения конфигурации.

Псевдонимы расширений

Для каждого расширения, устанавливаемого через Composer, автоматически задаётся псевдоним. Его имя соответствует корневому пространству имён расширения в соответствии с его composer.json. Псевдоним представляет путь к корневой директории пакета. Например, если вы установите расширение yiisoft/yii2-jui, то вам автоматически станет доступен псевдоним @yii/jui. Он создаётся на этапе первоначальной загрузки (bootstrapping) примерно так:

Yii::setAlias('@yii/jui', 'VendorPath/yiisoft/yii2-jui');