CMS Botble организована поверх Laravel, но у неё собственная архитектура, которая расширяет стандартные возможности Laravel. Основное отличие в том, что она использует модульный подход, где каждая функциональность оформлена как пакет (package), и весь код (контроллеры, модели, маршруты и т.д.) распределён по этим пакетам.
Разберём, как это работает и подключается:
1. Архитектура CMS Botble
Директория platform:
Это главная папка, где расположены все основные компоненты, модули и расширения.
Внутри неё находятся папки:
core: Основные компоненты фреймворка (базовые функциональности).
packages: Дополнительные пакеты (расширения, такие как плагины).
themes: Шаблоны для отображения фронтенда.
Подробности структуры:
core/base:
Здесь реализованы базовые классы и сервисы, которые служат основой для всего приложения.
Например:
BaseHelper: Хелпер для общих операций.
Http: Содержит middleware, обработчики запросов и т.д.
core/acl:
Компонент для управления ролями и доступом пользователей.
core/dashboard:
Код, отвечающий за отображение административной панели.
packages/*:
Это модули/плагины, которые добавляют функциональность (например, Menu, SeoHelper, Slug).
2. Где находятся контроллеры, маршруты и модели?
Контроллеры, маршруты и модели в Botble CMS распределены по соответствующим модулям и подключаются динамически.
Контроллеры:
Находятся в папках типа:
platform/core/[module]/src/Http/Controllers
platform/packages/[package]/src/Http/Controllers
Модели:
Модели обычно располагаются в:
platform/core/[module]/src/Models
platform/packages/[package]/src/Models
Маршруты:
В Botble CMS маршруты находятся в файлах routes/web.php внутри модулей или пакетов.
Например:
platform/core/[module]/routes/web.php
platform/packages/[package]/routes/web.php
3. Как это подключается?
CMS Botble использует механизм автозагрузки и провайдеров сервисов (Service Providers) для подключения своих компонентов.
Service Providers:
Каждый модуль или пакет имеет свой ServiceProvider, который регистрирует маршруты, контроллеры и любые необходимые зависимости.
Пример:
platform/core/Base/Providers/BaseServiceProvider.php
Внутри него может быть код для регистрации:
public function boot()
{
// Подключение маршрутов
$this->loadRoutesFrom(__DIR__ . '/../routes/web.php');
// Подключение вьюх
$this->loadViewsFrom(__DIR__ . '/../resources/views', 'base');
}
Автозагрузка:
Botble CMS автоматически сканирует модули и подключает их провайдеры. Это реализовано через:
Файл composer.json пакета, где прописан psr-4 для автозагрузки.
В корневом composer.json проекта указывается botble/* для автоматического поиска всех пакетов.
Маршруты:
Вместо стандартного routes/web.php Laravel, Botble CMS использует маршруты внутри модулей.
Например, MenuServiceProvider загружает маршруты для управления меню:
protected function loadRoutes()
{
$this->loadRoutesFrom(__DIR__ . '/../routes/web.php');
}
4. Работа с данными и репозитории
Botble CMS использует паттерн Repository, чтобы отделить бизнес-логику от данных:
Репозитории: В папках типа Repositories/Eloquent находятся классы, которые обрабатывают запросы к данным.
Интерфейсы: Репозитории реализуют интерфейсы, которые расположены в Repositories/Interfaces.
Пример:
Модуль Menu:
Модель: platform/core/menu/src/Models/Menu.php
Репозиторий: platform/core/menu/src/Repositories/Eloquent/MenuRepository.php
Интерфейс: platform/core/menu/src/Repositories/Interfaces/MenuInterface.php
5. Как работает административная панель?
Административная панель (Dashboard) построена с использованием готовых виджетов и компонентов:
Виджеты: Находятся в core/dashboard/src/Widgets.
Контроллеры для админки: Находятся в соответствующих модулях в Http/Controllers.
Меню админки: Управляется через Menu-пакет.
6. Особенности динамической загрузки:
Botble CMS создаёт реестр модулей, который позволяет динамически подключать пакеты.
Реестр формируется в файлах конфигурации, например, config/packages.php или config/plugins.php.
Botble CMS распределяет весь код по модулям и подключает их динамически через провайдеры сервисов.
Контроллеры, модели и маршруты скрыты внутри модулей/пакетов, но легко подключаются через механизм автозагрузки.
Использование паттернов (Service Provider, Repository) делает систему гибкой и модульной, что упрощает расширение функциональности.
В CMS Botble сервис-провайдеры подключаются через механизм Laravel Service Providers, и их регистрация обычно происходит в двух местах:
1. В файле platform/core/Base/composer.json:
В Botble CMS каждый модуль или пакет имеет свой файл composer.json, где указывается автозагрузка классов и сервис-провайдеров.
Для модуля Base, в его composer.json, вы, вероятно, найдёте что-то вроде:
"autoload": {
"psr-4": {
"Botble\\Base\\": "src/"
}
},
"extra": {
"laravel": {
"providers": [
"Botble\\Base\\Providers\\BaseServiceProvider"
]
}
}
Ключ providers: Указывает, что BaseServiceProvider автоматически регистрируется Laravel при загрузке приложения.
2. В platform/core/Providers/CoreServiceProvider.php:
Если провайдеры не зарегистрированы автоматически через composer.json, они могут подключаться вручную в другом "центральном" провайдере. В Botble CMS это часто делается в CoreServiceProvider:
public function register()
{
$this->app->register(\Botble\Base\Providers\BaseServiceProvider::class);
}
3. Автозагрузка через composer dump-autoload:
После добавления нового провайдера, Laravel автоматически подхватит его при выполнении команды:
composer dump-autoload
4. Проверка глобальной регистрации:
Проверьте в файле config/app.php (в секции providers), если CMS Botble добавляет собственные провайдеры глобально (обычно этого не делают, так как регистрация идёт через пакеты).
Итог:
Файл BaseServiceProvider.php подключается автоматически через:
Регистрацию в composer.json модуля.
(Опционально) Вручную в CoreServiceProvider.
Если провайдер не виден, убедитесь, что:
Вы выполнили composer dump-autoload.
Провайдер зарегистрирован в composer.json или вручную через другой провайдер.
Комментариев нет:
Отправить комментарий