Пакет [Voyager](https://github.com/thedevdojo/voyager) представляет собой административную панель (admin panel) для приложений на базе Laravel, предоставляющую возможность быстро и удобно управлять контентом. Его ключевая задача — упростить разработку админки, предоставив интуитивно понятный интерфейс и набор инструментов для работы с базой данных и контентом.
### Схема работы и структура пакета
#### 1. **Data Types и BREAD**
- **Data Types** — это основной элемент конфигурации Voyager. Каждый "тип данных" (DataType) соответствует определенной сущности (entity) в приложении. Он указывает на конкретную таблицу в базе данных и определяет, как эта таблица будет представлена в административной панели.
- **BREAD** (Browse, Read, Edit, Add, Delete) — это набор действий, которые можно выполнить с любой сущностью в админке. Это аналог CRUD (Create, Read, Update, Delete).
#### 2. **Процесс рендеринга страниц**
Когда пользователь запрашивает страницу для работы с конкретной сущностью (например, список записей), Voyager выполняет следующие шаги:
1. **Запрос к таблице `data_types`:**
- При запросе любой страницы, связанной с конкретной сущностью (например, список записей), Voyager сначала обращается к таблице `data_types`. В этой таблице хранится информация о типах данных, включая название сущности, таблицу, с которой она связана, и другие настройки.
- Поиск сущности происходит по полю `slug`, которое обычно указывается в URL. Например, если в URL указано `/admin/posts`, то `slug` будет равен `posts`.
2. **Получение конфигурации для сущности:**
- После получения информации о сущности из `data_types`, Voyager загружает конфигурацию для данного типа данных. Эта конфигурация включает в себя:
- Список полей, которые будут отображаться на странице.
- Связи с другими таблицами (relations).
- Настройки фильтров, сортировок и пагинации.
3. **Формирование SQL-запроса:**
- На основании полученной конфигурации формируется SQL-запрос для выборки данных из соответствующей таблицы. В запрос включаются:
- Поля, которые должны отображаться.
- Необходимые `JOIN`-ы для получения связанных данных (если есть связи с другими таблицами).
- Условия фильтрации (например, по конкретным полям).
- Настройки сортировки и лимита для пагинации.
4. **Пагинация и рендеринг:**
- Данные из базы данных передаются в соответствующий Blade-шаблон, который рендерит страницу с учетом полученных данных.
- Если данные требуют пагинации, к результатам выборки добавляется информация о страницах и ссылках на переходы между ними.
#### 3. **Работа с отношениями (Relationships)**
- Voyager поддерживает различные типы отношений между сущностями (One-to-One, One-to-Many, Many-to-Many). Если в конфигурации сущности указаны отношения, Voyager автоматически добавляет соответствующие `JOIN`-ы в SQL-запрос для получения связанных данных.
- В админке такие отношения могут отображаться в виде выпадающих списков, таблиц с привязками и т.д.
#### 4. **Дополнительные запросы**
- Для операций, связанных с созданием, обновлением и удалением записей, Voyager выполняет дополнительные запросы к базе данных:
- **Создание записи (Add):** Формируется запрос `INSERT INTO`, используя данные, введенные пользователем.
- **Редактирование записи (Edit):** Формируется запрос `UPDATE`, где данные обновляются на основе введенной информации.
- **Удаление записи (Delete):** Формируется запрос `DELETE FROM`, где запись удаляется по её идентификатору.
#### 5. **Встроенные функции и кастомизация**
- Voyager предоставляет встроенные функции для автоматической валидации данных, управления файлами (например, загрузка изображений), а также возможности кастомизации админки через настройки и расширения.
### Итог
Voyager упрощает создание административных панелей для приложений на Laravel, предоставляя удобный и мощный интерфейс для работы с базой данных и контентом. Он позволяет минимизировать количество кода, необходимого для управления сущностями, и обеспечивает гибкость в настройке и кастомизации админки под конкретные требования проекта.
Генератор админок на Laravel
3 минуты
3 прочтения
14 августа