Порядок загрузки модулей и классов в Koseven
В Koseven (и Kohana) порядок загрузки модулей и классов определяется системой каскадной файловой системы. Порядок поиска файлов и приоритеты зависят от структуры проекта и способа их объявления в конфигурации.
Порядок поиска файлов
application/classes/ (самый высокий приоритет)
modules/{имя_модуля}/... (в порядке объявления в Kohana::modules())
system/classes/ (самый низкий приоритет)
Правило приоритета
Нижние модули в списке имеют более высокий приоритет
Если файл есть в application/, он всегда загружается первым
Примеры использования и переопределения
Переопределение классов через наследование
// Создание расширения класса из модуля auth
class Model_Auth extends Kohana_Model_Auth {
// добавление новых методов
}
Структура модулей (пример)
Системные модули
- • database (база данных)
- • orm (ORM)
- • cache (кэширование)
Базовые компоненты
- • auth (авторизация)
- • entity (сущности)
- • erp100_core (ядро ERP)
Важные принципы
Зависимости и порядок
Модули, использующие другие модули (например, erp118_links использует auth), должны быть размещены ниже тех, которые они используют. Это обеспечивает корректную загрузку зависимостей.
Переопределение классов
Если в application/classes/ есть файл с тем же именем, что и в модуле, он будет использован вместо файла из модуля. Это позволяет легко изменять поведение без изменения исходного кода модулей.
Конфигурация модулей
Правильное расположение модулей в Kohana::modules() определяет приоритеты и позволяет эффективно управлять зависимостями между компонентами системы.
Ключевые выводы
- application/classes/ имеет абсолютный приоритет
- Последний модуль в списке имеет самый высокий приоритет
- Переопределение классов через наследование
- Правильная структура зависимостей важна для работы системы
Рекомендуемая структура модулей
Kohana::modules(array(
// 1. Системные модули
'database' => MODPATH.'database',
'orm' => MODPATH.'orm',
'cache' => MODPATH.'cache',
// 2. Базовые компоненты
'llm' => APPPATH.'modules/llm', // Библиотека, используемая другими модулями
'auth' => MODPATH.'auth',
'entity' => APPPATH.'modules/entity',
'erp100_core' => APPPATH.'modules/erp100_core',
// 3. Прикладные модули (в порядке зависимости)
'erp118_links' => APPPATH.'modules/erp118_links',
'erp210_crm' => APPPATH.'modules/erp210_crm',
'erp212_storage' => APPPATH.'modules/erp212_storage'
));
Эта структура обеспечивает:
- Правильные зависимости между модулями
- Возможность переопределения поведения в более специфичных модулях
- Удобство поддержки и расширения системы