Псевдонимы используются для представления путей к файлам или для представления URL адресов с целью того, чтобы не приходилось полностью прописывать пути к файлам или полные URL адреса.
Псевдоним должен начинаться со знака '@', чтобы не перепутать его с адресом файла или с URL адресом.
Например псевдоним '@yii' указывает на папку, в которую был установлен Yii framework, а псевдоним '@web' представляет собой базовый, основной URL адрес (base URL) текущего приложения.
Псевдонимы используются для обозначения путей к файлам или URL адресов и помогают избежать использования абсолютных путей
или URL в коде. Для того, чтобы не перепутать псевдоним с обыным путём к файлу или URL, должен начинаться с `@`. В Yii
имеется множество заранее определённых псевдонимов. Например, `@yii` указывает на директорию, в которую был установлен
Yii framework, а `@web` можно использовать для получения базового URL текущего приложения.
Создание псевдонимов <a name="defining-aliases"></a>
----------------
----------------------------------------------
Для создания псевдонима пути к файлу или псевдонима какого либо URL адреса используется метод [[Yii::setAlias()]].
Пример:
Для создания псевдонима пути к файлу или URL используется метод [[Yii::setAlias()]]:
```php
// псевдоним пути к файлу
Yii::setAlias('@foo','/path/to/foo');
// псевдоним URL адреса
// псевдоним URL
Yii::setAlias('@bar','http://www.example.com');
```
> Примечание: псевдоним пути к файлу или псевдоним URL адреса могут указывать на НЕСУЩЕСТВУЮЩИЙ файл или интернет ресурс.
> Примечание: псевдоним пути к файлу или URL *не* обязательно указывает на существующий файл или ресурс.
Если вы создали псевдоним пути, то из него можно вывести производный путь(не вызывая [[Yii::setAlias()]]) с помощью добавления знака '/' с последующим указанием необходимого пути. Псевдонимы, созданные с помощью [[Yii::setAlias()]] называются *корневыми псевдонимами (root aliases)*, тогда как производные псевдонимы называются *производными псевдонимами (derived aliases)*.
Например, `@foo` - это корневой псевдоним, тогда как `@foo/bar/file.php` - это производный псевдоним.
Используя уже заданный псевдоним вы можете получить на основе него новый без вызова [[Yii::setAlias()]]. Сделать это
можно добавив в его конец `/`, за которым следует один или более сегментов пути. Псевдонимы, определённые при помощи
[[Yii::setAlias()]] являются *корневыми псевдонимами*, в то время как полученные из них называются *производными
псевдонимами*. К примеру, `@foo` является корневым псевдонимом, а `@foo/bar/file.php` — производным.
Вы можете создать новый псевдоним используя ранее созданный псевдоним (независимо от того корневой он или производный):
Вы можете задать новый псевдоним используя ранее созданный псевдоним (не важно, корневой он или производный):
```php
Yii::setAlias('@foobar','@foo/bar');
```
Корневые псевдонимы как правило создаются на этапе [предварительной загрузки (bootstrapping)](runtime-bootstrapping.md) stage.
Например вы можете вызвать [[Yii::setAlias()]] внутри [входного скрипта (entry script)](structure-entry-scripts.md).
Для удобства использования, в [приложении (Application)](structure-applications.md) предусмотрено свойство 'aliases' , в которое возможна запись, т.е. вы можете [изменить настройки](concept-configurations.md) вашего приложения как в нижеследующем примере:
Корневые псевдонимы, как правило, создаются на этапе [предварительной загрузки (bootstrapping)](runtime-bootstrapping.md).
Например, вы можете вызвать [[Yii::setAlias()]] в [входном скрипте](structure-entry-scripts.md). Для удобства, в
[приложении (Application)](structure-applications.md) предусмотрено свойство `aliases`, которое можно задать через
Если не указать `@foo/bar` в качестве корневого псевдонима, последнее выражение выведет`/path/to/foo/bar/file.php`.
Если бы `@foo/bar` не является корневым псевдонимом, последняя строка вывела бы `/path/to/foo/bar/file.php`.
Использование псевдонимов <a name="using-aliases"></a>
-------------
------------------------------------------------
Псевдонимы распознаются во многих частях Yii без необходимости вызова [[Yii::getAlias()]] для раскрытия псевдонимов. Например, [[yii\caching\FileCache::cachePath]] принимает в качестве аргумента как обычный путь к файлу, так и псевдоним, благодаря тому, что псевдонимы начинаются со знака '@'.
Псевдонимы распознаются во многих частях Yii без необходимости предварительно вызывать [[Yii::getAlias()]] для
получения пути или URL. Например, [[yii\caching\FileCache::cachePath]] принимает как обычный путь к файлу, так и
псевдоним пути благодаря префиксу `@`, который позволяет их различать.
```php
useyii\caching\FileCache;
...
...
@@ -90,32 +94,33 @@ $cache = new FileCache([
]);
```
Для того чтобы узнать, поддерживает ли необходимый вам метод или свойство класса псевдонимы в качестве аргументов обратитесь к документации API.
Для того чтобы узнать, поддерживает ли метод или свойство псевдонимы, обратитесь к документации API.
Для каждого [расширения](structure-extensions.md), устанавливаемого через Composer автоматически создается псевдоним.
Имя псевдонима расширения соответствует корневому пространству имен, которое указано в файле `composer.json` расширения. Данный псевдоним указывает на корневую папку расширения.
Например, если вы установите расширение `yiisoft/yii2-jui`, то для вас автоматически станет доступен псевдоним `@yii/jui`, создание которого будет происходить на этапе [первоначальной загрузки (bootstrapping)](runtime-bootstrapping.md) следующим образом:
Для каждого [расширения](structure-extensions.md), устанавливаемого через Composer, автоматически задаётся псевдоним.
Его имя соответствует корневому пространству имён расширения в соответствии с его `composer.json`. Псевдоним представляет
путь к корневой директории пакета. Например, если вы установите расширение `yiisoft/yii2-jui`, то вам автоматически станет
доступен псевдоним `@yii/jui`. Он создаётся на этапе [первоначальной загрузки (bootstrapping)](runtime-bootstrapping.md)
Для подключения и загрузки классов в Yii используется [автозагрузка классов](http://www.php.net/manual/ru/language.oop5.autoload.php). Автозагрузчик классов в Yii совместим со стандартом автозагрузки [PSR-4](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md) и работает быстро.
Автозагрузчик устанавливается когда вы включаете файл `Yii.php` в свой скрипт.
> Примечание: Для простоты повествования мы будем говорить только об автозагрузке классов. Стоит отметить, что нижеприведенный способ может быть применен не только для автозагрузки классов, но и для автозагрузки интерфейсов(interface) и трейтов(traits).
Поиск и подключение файлов классов в Yii реализовано при помощи
[автозагрузки классов](http://www.php.net/manual/ru/language.oop5.autoload.php). Фреймворк предоставляет свой быстрый
совместимый с [PSR-4](https://github.com/php-fig/fig-standards/blob/master/proposed/psr-4-autoloader/psr-4-autoloader.md)
автозагрузчик, который устанавливается в момент подключения `Yii.php`.
> Примечание: Для простоты повествования, в этом разделе мы будем говорить только об автозагрузке классов. Тем не менее,
всё описанное применимо к интерфейсам и трейтам.
Как использовать автозагрузчик Yii <a name="using-yii-autoloader"></a>
Например, если полное имя класса `foo\bar\MyClass`, то [псевдоним пути(alias)](concept-aliases.md) данного файла будет
`@foo/bar/MyClass.php`. Для того, чтобы данный псевдоним превратился в путь файла в файловой системе нужно чтобы либо `@foo` либо `@foo/bar` был [корневым псевдонимом(root alias)](concept-aliases.md#defining-aliases).
Например, если абсолютное имя класса `foo\bar\MyClass`, то [псевдоним пути](concept-aliases.md) данного файла будет
`@foo/bar/MyClass.php`. Для того, чтобы данный псевдоним можно было преобразовать в путь к файлу, необходимо чтобы
либо `@foo` либо `@foo/bar` являлся [корневым псевдонимом](concept-aliases.md#defining-aliases).
При использовании [простого шаблона приложения (Basic Application Template)](start-basic.md), вы можете хранить свои классы в пространствах имен ниже `app`, тогда вам не понадобится указывать новый псевдоним пути для автозагрузки вашего класса. Это работает потому что
`@app` является [системным псевдонимом](concept-aliases.md#predefined-aliases), а такое имя класса как `app\components\MyClass`
преобразуется в путь
`папкавашегоприложения/components/MyClass.php`.
При использовании [шаблона приложения basic](start-basic.md) вы можете хранить свои классы в пространстве имён `app`.
В этом случае они будут загружаться автоматически без создания нового псевдонима. Это работает потому как `@app`
является [заранее определённым псевдонимом](concept-aliases.md#predefined-aliases) и такое имя класса как
`app\components\MyClass` в соответствии с описанным выше алготимом преобразуется в путь
`директорияПриложения/components/MyClass.php`.
В [шаблоне продвинутого приложения (Advanced Application Template)](tutorial-advanced-app.md), каждый уровень приложения обладает собственным корневым псевдонимом. Например, для front-end части корневым псевдонимом является `@frontend`, а для back-end части `@backend`. Это позволяет включать классы front-end части в пространство имен(namespace) ниже 'frontend', а для back-end части ниже 'backend'. При таком подходе ваши классы будут автоматически загружены автозагрузчиком Yii.
В [шаблоне приложения advanced](tutorial-advanced-app.md) каждый уровень приложения обладает собственным корневым
псевдонимом. Например, для frontend корневым псевдонимом является `@frontend`, а для backend — `@backend`. Это позволяет
разместить классы frontend в пространство имён `frontend`, а классы backend в пространство имён `backend`. При этом
классы будут загружены автоматически.
Карта классов <a name="class-map"></a>
---------
---------------------------------
Автозагрузчик Yii обладает возможностью, которая называется *карта классов*.Эта возможность позволяет указывать где необходимо искать классы в зависимости от имени файла.
Прежде чем загрузить файл автозагрузчик проверяет есть ли правила для файла в карте классов. Если файл находится в карте классов, то данный файл будет загружен напрямую без дальнейших проверок.
Это позволяет существенно ускорить автозагрузку. Все базовые классы Yii загружаются именно этим способом.
Автозагрузчик Yii поддерживает *карту классов*. Эта возможность позволяет указать путь к файлу для каждого имени класса.
При загрузке класса автозагрузчик проверяет наличие класса в карте. Если он там есть, соответствующий файл будет загружен
напрямую без каких-либо дополнительных проверок. Это делает автозагрузку очень быстрой. Все классы самого фреймворка
загружаются именно этим способом.
Пример добавления класса в карту классов `Yii::$classMap`:
Вы можете добавить класс в карту `Yii::$classMap` следующим образом:
[Псевдонимы](concept-aliases.md) могут быть использованы для указания пути к файлу класса. Карту классов необходимо указать в разделе [загрузки фреймворка](runtime-bootstrapping.md) т.к. карта должна быть создана до того, как будут использованы ваши классы.
Для указания путей к файлам классов можно использовать [псевдонимы](concept-aliases.md). Карту классов необходимо
сформировать в процессе [первоначальной загрузки](runtime-bootstrapping.md) так как она должна быть готова до
использования классов.
Использование других автозагрузчиков <a name="using-other-autoloaders"></a>
По причине того что Yii использует Composer в качестве менеджера зависимостей, рекомендуется дополнительно установить автозагрузчик Composer. Если вы использует какие то дополнительные библиотеки, в которых есть свои автозагрузчики, то автозагрузчики этих библиотек также нужно будет установить.
Так как Yii использует Composer в качестве менеджера зависимостей, рекомендуется дополнительно установить его автозагрузчик.
Если вы используете какие-либо сторонние библиотеки, в которых есть свои автозагрузчики, эти автозагрузчики также необходимо
установить.
В случаях использования дополнительных автозагрузчиков вместе с автозагрузчиком Yii, файл `Yii.php` должен быть подключен *после* установки всех дополнительных автозагрузчиков. В таком случае автозагрузчик Yii будет первым используемым автозагрузчиком из установленных при автозагрузке. Например нижеследующий код взят напрямую из [входного скрипта(entry script)](structure-entry-scripts.md) для [Basic Application Template](start-basic.md). Первая строчка устанавливает автозагрузчик Composer, а вторая устанавливает автозагрузчик Yii.
При использовании дополнительных автозагрузчиков файл `Yii.php` должен быть подключен *после* их установки. Это позволит
автозагрузчику Yii первым пробовать загрузить класс. К примеру, приведённый ниже код взят из
[входного скрипта](structure-entry-scripts.md)[шаблона приложения basic](start-basic.md). Первая строка устанавливает
автозагрузчик Composer, а вторая — автозагрузчик Yii:
Вы можете использовать автозагрузчик Composer бес использования автозагрузчика Yii. Но в таком случае скорость автозагрузки может уменьшится, также вам нужно будет соблюсти правила автозагрузки для Composer.
Вы можете использовать автозагрузчик Composer без автозагрузчика Yii. Однако, скорость автозагрузки в этом случае
может уменьшится. Также вам будет необходимо сдедовать правилам автозагрузчика Composer.
> Информация: Если вы не хотите использовать автозагрузчик Yii, то вам нужно будет создать свою версию файла `Yii.php`
и подключить его к [входному скрипту(entry script)](structure-entry-scripts.md).
> Информация: Если вы не хотите использовать автозагрузчик Yii, создайте свою версию файла `Yii.php`
и подключите его в [входном скрипте](structure-entry-scripts.md).
Автозагрузка классов расширений <a name="autoloading-extension-classes"></a>
-----------------------------
Автозагрузчик Yii позволяет автоматически загружать классы [расширений](structure-extensions.md). Единственное правило в таком случае - расширение должно правильно указывать раздел 'autoload' в своем файле 'composer.json'. Более подробную информацию о том как правильно указать раздел 'autoload' вы можете узнать в [официальной документации Composer](https://getcomposer.org/doc/04-schema.md#autoload).