Поддержка

Обзор

Расширение функциональности Frame через подключаемые модули

Модули — это подключаемые пакеты, которые расширяют функциональность Frame, добавляя новые страницы, API-эндпоинты и UI-компоненты без изменения ядра.

Поставляемые модули

  • Журнал событий (frame/action-events) — аудит-лог действий пользователей, сравнение «Было/Стало», экспорт
  • Роли и права (frame/permissions) — управление ролями, abilities, назначение на записи, интеграция с bouncer
  • Заметки (frame/notes) — произвольные текстовые заметки на любой записи, Tiptap-редактор

Чем модуль отличается от ресурса?

Ресурс — описывает модель данных и генерирует стандартный CRUD-интерфейс (таблица, формы, фильтры).

Модуль — добавляет произвольную функциональность:

  • Собственные страницы с кастомным UI
  • API-эндпоинты
  • Инъекции UI-компонентов в существующие страницы (App Slots)
  • Контроль доступа через Gate
  • Может использовать ресурсы внутри себя

Структура модуля

Модуль — это composer-пакет со следующей структурой:

packages/my-module/
├── composer.json
├── config/
│   └── my-module.php
├── src/
│   ├── MyModuleServiceProvider.php
│   ├── Http/Controllers/
│   ├── Resources/
│   └── routes/
│       └── api.php
└── resources/
    └── js/
        └── my-module/
            ├── index.ts
            └── ...vue components

Порядок отображения

Модули отображаются в навигации в порядке, определяемом свойством order. Меньшее значение — выше в списке. По умолчанию order = 0.

$moduleManager->register(Module::make([
    'title' => 'Analytics',
    'link' => '/analytics',
    'order' => 10,
]));

$moduleManager->register(Module::make([
    'title' => 'Permissions',
    'link' => '/permissions',
    'order' => 20,
]));

В этом примере Analytics будет выше Permissions в навигации, независимо от порядка вызова register().

Подключение модуля

1. Установка через Composer

composer require vendor/my-module

Для локальной разработки добавьте path-репозиторий в composer.json:

{
  "repositories": [
    {
      "type": "path",
      "url": "./packages/my-module",
      "options": { "symlink": true }
    }
  ]
}

2. Подключение UI-части

В файле инициализации фронтенда (например resources/js/frame.js):

import { registerMyModule } from './modules/my-module'

// Регистрация модулей ДО инициализации FramePlugin
registerMyModule()

app.use(FramePlugin, { ... })

3. Публикация конфигурации

php artisan vendor:publish --tag=my-module-config