Переход к официальным ресурсам:      Codeigniter4 / Документация / Github / Форум / CodeIgniter3
Привет! В настоящий момент я временно прекратил перевод документации по причине того, что она она содержит целый ряд неточностей, а также еще дорабатывается со стороны разработчиков. Если ты заинтересован в изучении фреймворка CodeIgniter 4, то приглашаю тебя на свой канал на YouTube (Перейти на канал), где я более подробно выкладываю занятия по данному фреймворку.


Возможности по автозагрузке классов

При разработке приложения, рано или поздно настает момент, когда твой проект "обрастает" большим количеством классов, которые не только участвуют в работе, обеспечивая требуемый функционал, но еще и расположены в самых различных директориях твоего проекта. Помимо многочисленных классов, которые идут в составе фреймворка Codeigniter, тебе, возможно, потребуется использовать еще целый ряд сторонних библиотек, которые, в свою очередь, также могут содержать большое количество классов в своем составе.

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

Codeigniter 4 имеет в своем составе очень гибкий автозагрузчик классов, требующий минимальной настройки. Он полностью поддерживает поиск и загрузку классов, структура которых соответствует стандарту PSR-4. Помимо этого, он может находить отдельные классы, в которых вообще не указано пространство имён и даже попытается найти эти классы в общих директориях, таких как /app/Controllers, /app/Models и т. д.

Встроенный в фреймворк Codeigniter 4 автозагрузчик отлично работает сам по себе, но это не значит, что ты не можешь использовать в своем проекте и другие автозагрузчики. Ты без проблем можешь задействовать автозагрузчик Composer'a или даже написать свой собственный автозагрузчик, если это необходимо. Поскольку вся регистрация осуществляется через функцию spl_autoload_register(), то все автозагрузчики будут работать последовательно и не мешать друг другу. Автозагрузчик всегда остается в активном состоянии, как только начинается работа фреймворка и происходит его регистрация в spl_autoload_register().

Настройка автозагрузчика

Начальная настройка встроенного автозагрузчика осуществляется через файл настроек /app/Config/Autoload.php. Он содержит два главных массива: один для карты классов и второй для PSR4-совместимых пространств имён.

Определение пространств имён (psr-4)

Одним из лучших и правильных методов организации своих классов, является создание одного или нескольких пространств имён. Это наиболее важно для любых классов, связанных с бизнес-логикой, классов сущностей и т.д. Массив psr4, в файле конфигурации, позволяет сопоставить пространства имён с определенными директориями, в которых находятся эти классы:

$psr4 = [
        'App'         => APPPATH,
        'CodeIgniter' => SYSTEMPATH,
        "Your\\Namespace" => ROOTPATH . 'YourDir';
];

В качестве ключа массива psr4 указывается необходимое имя пространства имён. Начальный слеш указывать не требуется. Если ты используешь двойные кавычки при формировании массива, тогда не забывай экранировать все слеши, которые могут быть у ключей. Это означает, что если ты определяешь своё пространство имён как Your\Namespace, то указать в ключе массива ты должен его, как Your\\Namespace. Еще раз повторю, что только при использовании двойных кавычек. Значением каждого ключа массива является путь к директории, где расположены необходимые классы.

По умолчанию, директория приложения (/app) находится в пространстве имён App. Если ты хочешь переопределить это пространство, тогда отредактируй значение константы в файле /app/Config/Constants.php и установи новое имя, по своему желанию.

defined('APP_NAMESPACE') || define('APP_NAMESPACE', 'App');

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

На заметку! Все файлы конфигурации приложения /app/Config/* находятся в пространстве имен Config, а не в App\Config, как ты мог бы предположить. Это позволяет ядру фреймворка всегда находить их, даже если ты изменишь пространство имен App на другое значение.

 

Определение карты классов (classmap)

Массив карты классов находит широкое применение, когда ты не хочешь лишний раз затрагивать файловую систему дополнительными вызовами функций, например is_file (). Также, ты можешь использовать карту классов для связи со сторонними библиотеками, которые не имеют пространства имен. Пример заполения карты классов приведен ниже:

$classmap = [
        'Class1' => APPPATH .'libraries/lib/class1.php',
        'Class2' => APPPATH .'libraries/lib2/class2.php',
        'Class3' => APPPATH .'third_party/lib3/class3.php',
];

Здесь, в качестве ключа массива, указывается Имя класса, который ты планируешь использовать, а значением этого ключа является путь к файлу класса.

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

Поддержка автозагрузчика Composer

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

/*
|--------------------------------------------------------------------------
| Composer Path
|--------------------------------------------------------------------------
|
| The path that Composer's autoload file is expected to live. By default,
| the vendor folder is in the Root directory, but you can customize that here.
*/
defined('COMPOSER_PATH') || define('COMPOSER_PATH', ROOTPATH . 'vendor/autoload.php');

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


Комментарии к разделу:

Пока ещё никто не оставил своего комментария. Оставить свой!

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


Ваше имя:
Ваша почта:

  Закрыть