Порядок загрузки модулей и классов в Koseven

Последнее обновление: 3 минуты назад • Команда разработки

В 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'
));

Эта структура обеспечивает:

  • Правильные зависимости между модулями
  • Возможность переопределения поведения в более специфичных модулях
  • Удобство поддержки и расширения системы