Forge
markdowne8ad0934
1# Drupal — архитектура и операции (ядро, модули, конфигурация)
2
3**Назначение:** опорная карта **Drupal 8+** (современное ядро на Symfony-компонентах): структура, модули, сущности, конфигурация, деплой. Мир `software.drupal`. Drupal 7 и ниже — legacy; упоминать только как «наследие».
4
5**Порядок:** `status-php-laravel-v1.md` → `playbook-php-v1.md` → этот файл. Symfony детали ядра — при необходимости `kb-symfony-framework-fundamentals-v1.md`.
6
7---
8
9### 1. Ядро и стек
10
11- **Fact:** Drupal **8+** использует **Symfony** (HttpKernel, Routing, EventDispatcher и др. — конкретный набор зависит от версии `drupal/core` в composer.lock).
12- **Heuristic:** отладка «странного» HTTP-поведения — иногда пересекается с пониманием Symfony request cycle.
13- **Confidence:** high
14
15---
16
17### 2. Модули и хуки
18
19- **Fact:** расширение через **модули** (и темы); классические **hooks** сосуществуют с **событиями** (EventSubscriber) в OOP-стиле.
20- **Heuristic:** новый код предпочтительно на сервисах и плагинах ядра (plugin system), не только на procedural hooks где есть API.
21
22---
23
24### 3. Сущности и поля
25
26- **Fact:** контент и конфигурация моделируются **сущностями**, **полями**, **типами сущностей**; данные в БД + метаданные схемы.
27- **Heuristic:** прямые SQL в обход API сущностей — ломают кеш, хуки и целостность; использовать Entity API.
28
29---
30
31### 4. Конфигурация: config sync
32
33- **Fact:** конфиг в YAML (`config/sync` в типичном рабочем процессе); **configuration management** — экспорт/импорт между средами.
34- **Heuristic:** ручные правки конфига только на проде без sync — дрейф сред; процедура: export → VCS → deploy → import.
35- **First adoption task:** документировать, что считается «конфигом» vs «контентом» в проекте.
36
37---
38
39### 5. Кеш, агрегация, производительность
40
41- **Fact:** многоуровневое кеширование (render cache, page cache, dynamic page cache); теги кеша при инвалидации.
42- **Heuristic:** «не обновилось на сайте» — сначала кеш Drupal + reverse proxy, не сразу код.
43
44---
45
46### 6. Обновления и миграции
47
48- **Fact:** обновление ядра и контрибов через **Composer**; **update.php** / database updates после выката.
49- **Heuristic:** мажор Drupal — миграционный проект (данные, модули, API changes); читать release notes ветки.
50
51---
52
53### 7. Безопасность и права
54
55- **Fact:** система **permissions** и **roles**; проверки в route access, entity access.
56- **Heuristic:** кастомные маршруты без `_permission` / `_custom_access` — риск.
57- **Confidence:** medium
58
59---
60
61### 8. Drush и CLI
62
63- **Fact:** **Drush** — стандартный CLI для кеша, конфига, крон, миграций.
64- **Heuristic:** автоматизация деплоя через Drush команды в CI/CD.
65
66---
67
68## Registry card (template-knowledge-card-v1)
69
70### Provenance
71- source_refs: `https://www.drupal.org/docs`; Symfony dependency via drupal/core; 2026-03-01
72- created_at: 2026-03-01
73- updated_at: 2026-03-01
74- author: agent-notes KB maintainer
75
76### Metadata
77- card_id: KC-2026-03-01-DRUPAL-OPS
78- world: software.drupal
79- layer: world
80- tags: drupal; entities; config-sync; drush; symfony
81- status: active
82
83### Epistemic Linkage
84- epistemic_basis: fact + inference
85- evidence_type: official Drupal docs
86- confidence: medium
87- uncertainty: версия core и снятие deprecated API
88- falsification_trigger: смена архитектуры в будущих мажорах Drupal
89- transfer_boundary: не WordPress; не чистый Symfony app без Drupal
90
91### Core Unit
92- context: модуль, деплой конфига, апгрейд core
93- signal: «config sync», «почему пустой render»
94- action: Entity API + config workflow
95- outcome: воспроизводимые среды
96- lesson: в Drupal конфиг — код; контент — данные
97
98### Operationalization
99- first_adoption_task: composer.lock + список кастомных модулей
100- validation_check: `drush cr` + smoke после deploy
101- success_criterion: нет дрейфа config между stage/prod
102- rollback_or_mitigation: откат релиза + импорт предыдущего config snapshot
103
104### Lifecycle
105- supersedes: —
106- superseded_by: —
107- deprecation_reason: —
108
109
View only · write via MCP/CIDE