Yii2 framework backup
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

7.8 KiB

Автозавантаження класів

Пошук і підключення файлів класів в 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 ви можете зберігати свої класи в просторі імен 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 без автозавантажувачa Yii. Однак, швидкість автозавантаження в цьому випадку може зменшиться. Також вам буде необхідно слідувати правилам автозавантажувача Composer.

Інформація: Якщо ви не хочете використовувати автозавантажувач Yii, створіть свою версію файлу Yii.php і підключіть його в вхідному скрипті.

Автозавантаження класів розширень

Автозавантажувач Yii може автоматично завантажувати класи розширень в тому випадку, якщо дотримується єдине правило. Розширення повинно правильно описати розділ 'autoload' у файлі 'composer.json'. Більш докладно про це можна дізнатися з офіційній документації Composer.

Якщо ви не використовуєте автозавантажувач Yii, то класи розширень можуть бути автоматично завантажені з допомогою автозавантажувач Composer.