Pro vývojáře#
Dokumentace architektury CoolCMS — pro toho, kdo bude systém rozšiřovat.
Kde začít#
Čtete-li tohle poprvé, projděte v tomto pořadí:
- Pětivrstvý model — bez něj nedává zbytek smysl.
- Struktura projektu — kam co patří.
- Konvence kódu — jak má vypadat soubor, který napíšete.
- Životní cyklus manageru — kam patří vedlejší efekty.
- Identity mapa — landmina, do které narazíte do týdne.
Chci udělat…#
| Úkol | Kapitola |
|---|---|
| nový presenter v administraci | Admin presenter |
| nový výpis s filtry a řazením | Práce s tabulkami |
| formulář | Formuláře |
| výběr z tisíců položek místo selectu | Picker |
| komponentu | Komponenty |
| entitu a manager | Konvence kódu |
| přepočet nebo notifikaci po uložení | Životní cyklus manageru |
| nový endpoint API | Volání API + RBAC v API |
| naplánovanou úlohu | Cron presentery |
| Odesílání e-mailů | |
| novou adresu na frontu | Routování |
| přidat text nebo jazyk | Překlady |
| zrychlit čtení | Cache |
| zapojit obsah do hledání | Elasticsearch |
| upravit vzhled | Témata frontendu → SCSS |
| nasadit na starší databázi | Kontrola databáze |
Sekce#
| Sekce | Obsah |
|---|---|
| Úvod | vrstvy, struktura, konvence, instalace, nasazení, naplánované úlohy |
| Core | volání API, cache, routování, hooky, hydrátory, identity mapa, atributy sloupců, filtry, e-maily, Elasticsearch |
| UI | admin presenter, DataGrid, Picker, formuláře, komponenty, Latte, cron |
| Bezpečnost | autentizace, RBAC, CORS a rate limit, audit |
| Vzhled | témata, SCSS, design systém |
| Moduly | e-shop, sklad, fakturace, inzerce, katalog firem, blog, diskuze |
| Překlady | NEON i databázová vrstva |
| Testy a nástroje | PHPUnit, PHPStan, pre-commit, skills |
Šest věcí, které musíte vědět#
- Pětivrstvý model. Presenter → Manager → Service → Mapper → Repository. SQL žije výhradně v repository.
- Front nesahá do databáze. Volá Api sekci přes most — proto má tentýž modul dvě sady entit a mezi nimi teče pole, ne objekt.
- Hydrátory jsou dva.
OrmEntityHydratorna Api straně (stojí na Doctrine),EntityHydratorna Front/Admin straně (jen reflexe a atributy). Nezaměňovat. - Každé Api čtení vyprázdní identity mapu. Rozestavěný objektový graf tím přijde o spojení s databází a nejbližší uložení spadne.
- Vedlejší efekty patří do hooků manageru, ne do databázových triggerů — a do
after*jen ty vratné. - Uložení objektového grafu je nahrazení, ne doplnění. Co v payloadu chybí, se smaže.
Produkce a vývoj sdílejí jednu databázi
Není žádné „nejdřív na vývojovém“. Každý zápis je ostrý. Experimenty dělejte v transakci s návratem zpět.
Skills jsou závazné, manuál je výklad
Kanonický zápis kódu je ve skills/ — tenhle manuál je z nich udělaný návod
s vysvětlením, proč to tak je. Když se rozejdou, platí skill.