27 января 2025 г.

Архитектура CMS Botble в Laravel

 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 или вручную через другой провайдер.
    
    
    

Комментариев нет:

Отправить комментарий

Как установить TradingView на Ubuntu

Для установки TradingView на Ubuntu с помощью Snap, достаточно выполнить команду: sudo snap install tradingview После выполнения этой команд...