Yii vendor autoload php

Автозагрузка классов ¶

Поиск и подключение файлов классов в Yii реализовано при помощи автозагрузки классов. Фреймворк предоставляет свой быстрый совместимый с PSR-4 автозагрузчик, который устанавливается в момент подключения Yii.php .

Note: Для простоты повествования, в этом разделе мы будем говорить только об автозагрузке классов. Тем не менее, всё описанное применимо к интерфейсам и трейтам.

Как использовать автозагрузчик Yii ¶

При использовании автозагрузчика классов Yii следует соблюдать два простых правила создания и именования классов:

  • Каждый класс должен принадлежать пространству имён (то есть foo\bar\MyClass ).
  • Каждый класс должен находиться в отдельном файле, путь к которому определятся следующим правилом:
// $className — это абсолютное имя класса без начального "\" $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php'); 

Например, если абсолютное имя класса foo\bar\MyClass , то псевдоним пути данного файла будет @foo/bar/MyClass.php . Для того, чтобы данный псевдоним можно было преобразовать в путь к файлу, необходимо чтобы либо @foo либо @foo/bar являлся корневым псевдонимом.

При использовании шаблона приложения basic вы можете хранить свои классы в пространстве имён app . В этом случае они будут загружаться автоматически без создания нового псевдонима. Это работает потому как @app является заранее определённым псевдонимом и такое имя класса как app\components\MyClass в соответствии с описанным выше алгоритмом преобразуется в путь директорияПриложения/components/MyClass.php .

В шаблоне приложения advanced каждый уровень приложения обладает собственным корневым псевдонимом. Например, для frontend корневым псевдонимом является @frontend , а для backend — @backend . Это позволяет разместить классы frontend в пространство имён frontend , а классы backend в пространство имён backend . При этом классы будут загружены автоматически.

Карта классов ¶

Автозагрузчик Yii поддерживает карту классов. Эта возможность позволяет указать путь к файлу для каждого имени класса. При загрузке класса автозагрузчик проверяет наличие класса в карте. Если он там есть, соответствующий файл будет загружен напрямую без каких-либо дополнительных проверок. Это делает автозагрузку очень быстрой. Все классы самого фреймворка загружаются именно этим способом.

Вы можете добавить класс в карту Yii::$classMap следующим образом:

Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php'; 

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

Использование других автозагрузчиков ¶

Так как Yii использует Composer в качестве менеджера зависимостей, рекомендуется дополнительно установить его автозагрузчик. Если вы используете какие-либо сторонние библиотеки, в которых есть свои автозагрузчики, эти автозагрузчики также необходимо установить.

При использовании дополнительных автозагрузчиков файл Yii.php должен быть подключен после их установки. Это позволит автозагрузчику Yii первым пробовать загрузить класс. К примеру, приведённый ниже код взят из входного скрипта шаблона приложения basic. Первая строка устанавливает автозагрузчик Composer, а вторая — автозагрузчик Yii:

require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php'; 

Вы можете использовать автозагрузчик Composer без автозагрузчика Yii. Однако скорость автозагрузки в этом случае может уменьшится. Также вам будет необходимо следовать правилам автозагрузчика Composer.

Info: Если вы не хотите использовать автозагрузчик Yii, создайте свою версию файла Yii.php и подключите его в входном скрипте.

Автозагрузка классов расширений ¶

Автозагрузчик Yii может автоматически загружать классы расширений в том случае, если соблюдается единственное правило. Расширение должно правильно описать раздел ‘autoload’ в файле ‘composer.json’. Более подробно об этом можно узнать из официальной документации Composer.

Читайте также:  Таблица

Если вы не используете автозагрузчик Yii, то классы расширений могут быть автоматически загружены с помощью автозагрузчика Composer.

Page generated on Sun, 10 Jan 2021 09:27:42 +0000

Источник

Class Autoloading ¶

Yii relies on the class autoloading mechanism to locate and include all required class files. It provides a high-performance class autoloader that is compliant with the PSR-4 standard. The autoloader is installed when you include the Yii.php file.

Note: For simplicity of description, in this section we will only talk about autoloading of classes. However, keep in mind that the content we are describing here applies to autoloading of interfaces and traits as well.

Using the Yii Autoloader ¶

To make use of the Yii class autoloader, you should follow two simple rules when creating and naming your classes:

  • Each class must be under a namespace (e.g. foo\bar\MyClass )
  • Each class must be saved in an individual file whose path is determined by the following algorithm:
// $className is a fully qualified class name without the leading backslash $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php'); 

For example, if a class name and namespace is foo\bar\MyClass , the alias for the corresponding class file path would be @foo/bar/MyClass.php . In order for this alias to be resolvable into a file path, either @foo or @foo/bar must be a root alias.

When using the Basic Project Template, you may put your classes under the top-level namespace app so that they can be autoloaded by Yii without the need of defining a new alias. This is because @app is a predefined alias, and a class name like app\components\MyClass can be resolved into the class file AppBasePath/components/MyClass.php , according to the algorithm just described.

In the Advanced Project Template, each tier has its own root alias. For example, the front-end tier has a root alias @frontend , while the back-end tier root alias is @backend . As a result, you may put the front-end classes under the namespace frontend while the back-end classes are under backend . This will allow these classes to be autoloaded by the Yii autoloader.

To add a custom namespace to the autoloader you need to define an alias for the base directory of the namespace using Yii::setAlias(). For example to load classes in the foo namespace that are located in the path/to/foo directory you will call Yii::setAlias(‘@foo’, ‘path/to/foo’) .

Читайте также:  Java middle of array

Class Map ¶

The Yii class autoloader supports the class map feature, which maps class names to the corresponding class file paths. When the autoloader is loading a class, it will first check if the class is found in the map. If so, the corresponding file path will be included directly without further checks. This makes class autoloading super fast. In fact, all core Yii classes are autoloaded this way.

You may add a class to the class map, stored in Yii::$classMap , using:

Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php'; 

Aliases can be used to specify class file paths. You should set the class map in the bootstrapping process so that the map is ready before your classes are used.

Using Other Autoloaders ¶

Because Yii embraces Composer as a package dependency manager, it is recommended that you also install the Composer autoloader. If you are using 3rd-party libraries that have their own autoloaders, you should also install those.

When using the Yii autoloader together with other autoloaders, you should include the Yii.php file after all other autoloaders are installed. This will make the Yii autoloader the first one responding to any class autoloading request. For example, the following code is extracted from the entry script of the Basic Project Template. The first line installs the Composer autoloader, while the second line installs the Yii autoloader:

require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php'; 

You may use the Composer autoloader alone without the Yii autoloader. However, by doing so, the performance of your class autoloading may be degraded, and you must follow the rules set by Composer in order for your classes to be autoloadable.

Info: If you do not want to use the Yii autoloader, you must create your own version of the Yii.php file and include it in your entry script.

Autoloading Extension Classes ¶

The Yii autoloader is capable of autoloading extension classes. The sole requirement is that an extension specifies the autoload section correctly in its composer.json file. Please refer to the Composer documentation for more details about specifying autoload .

In case you do not use the Yii autoloader, the Composer autoloader can still autoload extension classes for you.

Источник

Автозагрузка классов ¶

Поиск и подключение файлов классов в Yii реализовано при помощи автозагрузки классов. Фреймворк предоставляет свой быстрый совместимый с PSR-4 автозагрузчик, который устанавливается в момент подключения Yii.php .

Примечание: Для простоты повествования, в этом разделе мы будем говорить только об автозагрузке классов. Тем не менее, всё описанное применимо к интерфейсам и трейтам.

Как использовать автозагрузчик Yii ¶

При использовании автозагрузчика классов Yii следует соблюдать два простых правила создания и именования классов:

  • Каждый класс должен принадлежать пространству имён (то есть foo\bar\MyClass ).
  • Каждый класс должен находиться в отдельном файле, путь к которому определятся следующим правилом:
// $className — это абсолютное имя класса без начального "\" $classFile = Yii::getAlias('@' . str_replace('\\', '/', $className) . '.php'); 

Например, если абсолютное имя класса foo\bar\MyClass , то псевдоним пути данного файла будет @foo/bar/MyClass.php . Для того, чтобы данный псевдоним можно было преобразовать в путь к файлу, необходимо чтобы либо @foo либо @foo/bar являлся корневым псевдонимом.

Читайте также:  Basic html and css code

При использовании шаблона приложения basic вы можете хранить свои классы в пространстве имён app . В этом случае они будут загружаться автоматически без создания нового псевдонима. Это работает потому как @app является заранее определённым псевдонимом и такое имя класса как app\components\MyClass в соответствии с описанным выше алгоритмом преобразуется в путь директорияПриложения/components/MyClass.php .

В шаблоне приложения advanced каждый уровень приложения обладает собственным корневым псевдонимом. Например, для frontend корневым псевдонимом является @frontend , а для backend — @backend . Это позволяет разместить классы frontend в пространство имён frontend , а классы backend в пространство имён backend . При этом классы будут загружены автоматически.

Карта классов ¶

Автозагрузчик Yii поддерживает карту классов. Эта возможность позволяет указать путь к файлу для каждого имени класса. При загрузке класса автозагрузчик проверяет наличие класса в карте. Если он там есть, соответствующий файл будет загружен напрямую без каких-либо дополнительных проверок. Это делает автозагрузку очень быстрой. Все классы самого фреймворка загружаются именно этим способом.

Вы можете добавить класс в карту Yii::$classMap следующим образом:

Yii::$classMap['foo\bar\MyClass'] = 'path/to/MyClass.php'; 

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

Использование других автозагрузчиков ¶

Так как Yii использует Composer в качестве менеджера зависимостей, рекомендуется дополнительно установить его автозагрузчик. Если вы используете какие-либо сторонние библиотеки, в которых есть свои автозагрузчики, эти автозагрузчики также необходимо установить.

При использовании дополнительных автозагрузчиков файл Yii.php должен быть подключен после их установки. Это позволит автозагрузчику Yii первым пробовать загрузить класс. К примеру, приведённый ниже код взят из входного скрипта шаблона приложения basic. Первая строка устанавливает автозагрузчик Composer, а вторая — автозагрузчик Yii:

require __DIR__ . '/../vendor/autoload.php'; require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php'; 

Вы можете использовать автозагрузчик Composer без автозагрузчика Yii. Однако скорость автозагрузки в этом случае может уменьшится. Также вам будет необходимо следовать правилам автозагрузчика Composer.

Информация: Если вы не хотите использовать автозагрузчик Yii, создайте свою версию файла Yii.php и подключите его в входном скрипте.

Автозагрузка классов расширений ¶

Автозагрузчик Yii может автоматически загружать классы расширений в том случае, если соблюдается единственное правило. Расширение должно правильно описать раздел ‘autoload’ в файле ‘composer.json’. Более подробно об этом можно узнать из официальной документации Composer.

Если вы не используете автозагрузчик Yii, то классы расширений могут быть автоматически загружены с помощью автозагрузчика Composer.

Источник

Оцените статью