Автозагрузка файлов

Каждое приложение состоит из большого количества классов в разных местах. Платформа предоставляет классы для основных функций. В вашем приложении будет ряд библиотек, моделей и других сущностей, чтобы заставить его работать. У вас могут быть сторонние классы, которые использует ваш проект. Отслеживание того, где находится каждый отдельный файл, и жесткое кодирование этого местоположения в ваших файлах в серии requires()— это огромная головная боль и очень подвержены ошибкам. Вот тут-то и пригодятся автозагрузчики.

CodeIgniter предоставляет очень гибкий автозагрузчик, который можно использовать с минимальной настройкой. Он может находить отдельные классы без пространства имен, классы с пространством имен, которые придерживаются структур каталогов автозагрузки PSR4 , и даже будет пытаться найти классы в общих каталогах (например, контроллеры, модели и т. Д.).

Для повышения производительности в карту классов были добавлены основные компоненты 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'
];

Ключ каждой строки — это имя класса, который вы хотите найти. Значение — это путь, по которому его нужно найти.

Устаревшая поддержка

Если ни один из вышеперечисленных методов не находит класс и класс не имеет пространства имен, автозагрузчик будет искать в каталогах / app / Libraries и / app / Models, чтобы попытаться найти файлы. Это позволяет упростить переход с предыдущих версий.

Вариантов конфигурации для устаревшей поддержки нет.

Поддержка композиторов

Поддержка Composer автоматически инициализируется по умолчанию. По умолчанию он ищет файл автозагрузки Composer по адресу ROOTPATH.'vendor/autoload.php'. Если вам нужно изменить расположение этого файла по какой-либо причине, вы можете изменить значение, определенное в Config\Constants.php.

Заметка

Если одно и то же пространство имен определено и в CodeIgniter, и в Composer, автозагрузчик CodeIgniter будет первым, кто сможет найти файл.

Добавить комментарий