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

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

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

Старт! Честный VDS/VPS, на котором «Лунная База» живет уже 20+ лет

Задумываетесь о том, чтобы поднять свой pet-проект, сайт клиента или настроить окружение для разработки? Уже пора подумать, где арендовать железо.

Лунная База хостится на FirstVDS более 20 лет. Мыслей о том, чтобы перебраться на другой хостинг, не было ни разу (хотя опыт работы с другими вариантами, конечно, есть).

Бывали разные ситуации, но они бывают на любом железе. Главное, что нужно понять: здесь нет маркетинговой шелухи и сказок про «мы всё сделаем за вас». Если вы берете VDS — вам дают полный root, возможность накатить любую ОС и не лезут в ваши конфиги.

Если в саппорт написать с вопросом по вашему коду и получить ответ: «Читайте документацию и разбирайтесь сами» или «Обратитесь к профильному специалисту» — это не повод обижаться. Это повод углубить свои знания в DevOps и сайтостроении! Бегите от тех, кто пообещает: «Мы всё чиним и настраиваем абсолютно бесплатно!». Никто никогда не работает «по доброте душевной» в ущерб себе, а бесплатный сыр в администрировании обычно заканчивается сломанной базой данных.

Что по факту: Гибкое масштабирование ядер и RAM, экономия по сравнению с физическими серверами и адекватная панель ispmanager, если она вам нужна.



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.

Самый честный хостинг за 20+ лет существования Лунной Базы

Задумываешься о том, чтобы поднять свой сайт в Интернете? Уже пора подумать о том, какой хостинг выбрать?

Лунная База хостится 20+ лет на firstDVS. При этом, мыслей о том, чтобы перебраться на другой хостинг не было. (Но, при этом есть опыт работы с другими вариантами.)

Бывали с firstDVS разные ситуации, но, они бывают на всех хостингах. Единственное, что тут важно понять, - это то, что никто ничего тебе не будет впаривать... Но, и работать за тебя тоже никто не станет. Если в саппорт ответили: «Читайте по ссылке и разбирайтесь сами...» или вообще «Обратитесь за помощью к специалисту», - это повод углубить свои знания в области сайтостроения, а не бежать к тем, что пообещают: «Мы всё чиним и всё делаем за своих клиентов абсолютно бесплатно!» Никто никогда ничего ни за кого "по доброте душевной" не делал, не делает и не будет делать!

Старт! Горячий старт на просторы интернета
Старт! Горячий старт на просторы интернета
Старт! Меню