Файлы автозагрузки
Каждое приложение состоит из большого количества классов, расположенных в разных местах. Фреймворк предоставляет классы для базовых функций. Ваше приложение будет содержать ряд библиотек, моделей и других сущностей для его работы. Возможно, вы используете сторонние классы в вашем проекте. Отслеживать, где находится каждый файл, и жестко задавать это расположение в ваших файлах в серии requires() — огромная головная боль и очень подвержено ошибкам. Именно здесь на помощь приходят автозагрузчики.
CodeIgniter предоставляет очень гибкий автозагрузчик, который можно использовать с очень небольшим количеством настроек. Он может находить отдельные классы без пространств имен, классы со пространствами имен, которые соответствуют структурам директорий автозагрузки PSR-4, и даже попытается найти классы в общих директориях (например, Controllers, Models и т.д.).
Для повышения производительности ядро CodeIgniter добавлено в карту классов.
Автозагрузчик отлично работает сам по себе, но также может работать с другими автозагрузчиками, такими как Composer, или даже с вашими собственными настраиваемыми автозагрузчиками, если это необходимо. Поскольку они все регистрируются через spl_autoload_register, они работают последовательно и не мешают друг другу.
Автозагрузчик всегда активен, регистрируясь с spl_autoload_register() в начале выполнения фреймворка.
Настройка
Первоначальная настройка выполняется в /app/Config/Autoload.php. Этот файл содержит два основных массива: один для карты классов и один для пространств имен, совместимых с PSR4.
Пространства имен
Рекомендуемый метод организации ваших классов — создание одного или нескольких пространств имен для файлов вашего приложения. Это наиболее важно для всех классов, связанных с бизнес-логикой, сущностями и т.д. Массив psr4 в файле конфигурации позволяет вам сопоставить пространство имен с каталогом, в котором эти классы можно найти:
$psr4 = [
'App' => APPPATH,
'CodeIgniter' => SYSTEMPATH,
];
Ключом каждой строки является само пространство имен. После него не должно быть слеша. Если вы используете двойные кавычки для определения массива, убедитесь, что вы экранируете обратную косую черту. Это означает, что это будет My\\App, а не My\App. Значение — это местоположение каталога, в котором можно найти классы. Они должны иметь конечный слеш.
По умолчанию папка приложения сопоставляется со пространством имен App . Хотя вы не обязаны использовать пространства имен для контроллеров, библиотек или моделей в каталоге приложения, если вы это сделаете, они будут найдены в пространстве имен App. Вы можете изменить это пространство имен, отредактировав файл /app/Config/Constants.php и установив новое значение пространства имен в настройке APP_NAMESPACE.
define('APP_NAMESPACE', 'App');
Вам потребуется изменить любые существующие файлы, которые ссылаются на текущее пространство имен.
Важно
Файлы конфигурации находятся в пространстве имен Config, а не в App\Config, как можно было бы предположить. Это позволяет ядру системы всегда находить их, даже если пространство имен приложения изменилось.
Карта классов
Карта классов широко используется CodeIgniter для извлечения последних унций производительности из системы, не обращаясь к файловой системе с дополнительными is_file() вызовами. Вы можете использовать карту классов для ссылки на сторонние библиотеки, которые не имеют пространств имен:
$classmap = [
'Markdown' => APPPATH . 'third_party/markdown.php'
];
Ключом каждой строки является имя класса, который вы хотите найти. Значение — путь к его расположению.
Поддержка Composer
Поддержка Composer автоматически инициализируется по умолчанию. По умолчанию она ищет файл автозагрузки Composer в ROOTPATH . 'vendor/autoload.php'. Если вам нужно изменить расположение этого файла по какой-либо причине, вы можете изменить значение, определенное в Config\Constants.php.
Примечание
Если одно и то же пространство имен определено как в CodeIgniter, так и в Composer, автозагрузчик CodeIgniter будет первым, у кого будет шанс найти файл.
© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/concepts/autoloader.html