Admin
Administrace Petrovo CMS je dnes rozdělená na dvě vrstvy:
app/Modules/*obsahuje aplikační logiku, controllery, služby a routyapp/admin/*obsahuje sdílené šablony a několik legacy wrapperů pro nástroje
To je důležitý rozdíl proti starší struktuře, kde byly moduly přímo v app/admin/modules.
Autentizace administrace
Administrace už nepoužívá lokální hesla. Přihlášení běží přes centrální passkey autoritu a CMS po callbacku páruje identitu podle emailu administrátora.
Podrobný popis je v sekci Admin Auth (Passkey).
Aktuální struktura
app/Modules/
├── Admin/
│ ├── Auth/
│ ├── Group/
│ ├── Permission/
│ └── User/
├── Block/
├── Category/
├── CookieBar/
├── Cube/
├── Gallery/
├── I18n/
├── LogForm/
├── Menu/
├── News/
├── Newsletter/
├── Page/
├── Redirection/
├── Setting/
├── Superadmin/
└── User/
app/admin/
├── templates/
│ ├── wrapper.tpl
│ ├── login.tpl
│ ├── logged-out.tpl
│ ├── emergency-login.tpl
│ └── _*.tpl
├── adminneo.php
├── files.gallery.php
└── tools/
Jak se admin routuje
Hlavní vstup je v app/routes/admin.php.
Tam se děje:
- definice pipeline
PIPE_ADMINaPIPE_TOOLS - dashboard route
/ADMIN - připojení routerů ze
app/Modules/*/router.php
Submoduly uvnitř domén pak typicky používají vlastní routes.php, které si rodičovský router.php includuje. Příklad:
app/Modules/Admin/router.phpapp/Modules/Admin/User/routes.phpapp/Modules/Menu/router.phpapp/Modules/Menu/Node/routes.php
Middleware pipeline
PIPE_ADMIN skládá hlavně tyto middleware:
- proxy
- session expiration
- CSRF
- admin auth
- permission check
- logging
- IP blacklist
- response headers
PIPE_TOOLS je lehčí varianta pro nástroje jako adminneo a files.gallery.
Jak vypadá admin modul
Běžný admin modul už dnes typicky žije v app/Modules/{Module} nebo app/Modules/{Domain}/{Module}.
Příklad jednoduchého modulu:
app/Modules/Admin/User/
├── UserController.php
├── UserService.php
├── UserListService.php
├── UserData.php
├── data.yaml
├── listing.tpl
└── routes.php
Role souborů:
*Controller.phpobsluhuje HTTP akce*Service.phpdrží business logiku a zápisy do DB*ListService.phppřipravuje listing a filtrydata.yamldefinuje admin formulářlisting.tplvykresluje seznamroutes.phpneborouter.phpregistruje routy
Základní controller pattern
Admin controllery běžně dědí z App\Modules\AdminBaseController.
Ten poskytuje:
- načtení
data.yamlpřesinitModule(__DIR__, self::PAGE) - společné metody
list()afilter() - práci se session pro filtry a stránkování
- orchestrace validace přes
handleFormSubmit()
Typický pattern v controlleru:
class ExampleController extends AdminBaseController
{
const string PAGE = 'examples';
public function __construct()
{
$this->service = new ExampleService();
$this->listService = new ExampleListService();
$this->initModule(__DIR__, self::PAGE);
}
}
Routovací pattern modulu
Typický modul registruje:
GET /ADMIN/{page}pro listingPOST /ADMIN/{page}/filterpro filtrováníGET /ADMIN/{page}/{id}pro formulářPOST /ADMIN/{page}pro createPOST /ADMIN/{page}/{id}pro updateDELETE /ADMIN/{page}/{id}pro delete
Modul může přidat i vlastní akce, například:
POST /ADMIN/admins/{id}/invitePOST /ADMIN/admins/{id}/activatePOST /ADMIN/pages/{id}/noindexGET|POST /ADMIN/pages/{id}/duplicate
data.yaml a formuláře
data.yaml je zdroj pravdy pro admin formulář.
Definuje zejména:
- titulky formuláře
- sekce a fieldsety
- textová pole, textarea, selecty, checkboxy
- vícejazyčná pole
- validační pravidla
- speciální elementy jako
dropzone
Controller do formuláře předává:
- uložená data
selects- parsované
yamlFields
Vykreslení dělá AdminForm.
Šablony a wrapper
Sdílené admin šablony jsou v app/admin/templates/.
Nejdůležitější:
wrapper.tplje hlavní shell administracelogin.tplje fallback stránka login flowlogged-out.tplje potvrzovací stránka po odhlášení_menu.tpl,_dashboard.tpl,_pagination.tpla další jsou sdílené partialy
Pro plnou stránku se běžně používá App\Modules\Html::wrap(...).
Speciální admin sekce
Auth modul
app/Modules/Admin/Auth/ řeší:
/ADMIN/login/ADMIN/logged-outPOST /ADMIN/logout
Je to samostatný modul, ale bez klasického data.yaml formuláře.
Admin nástroje
Legacy nástroje běží přes samostatné wrappery:
/ADMIN/adminneo.*/ADMIN/files.gallery.*
Ty používají pipeline PIPE_TOOLS.
Vytvoření nového modulu
Základní scaffold vytvoří:
./console make:module
Generator vytvoří:
- controller
- service
- list service
data.yamllisting.tpl- route file
Navíc:
- doplní router pro submodul, pokud vzniká uvnitř domény
- přidá položku do admin menu
- založí odpovídající admin permission v databázi
Scaffold je startovní kostra. Service a ListService obsahují záměrně TODO místa pro doplnění konkrétní DB logiky.
Co je dobré vědět
- auth a autorizace jsou oddělené: identitu potvrzuje passkey autorita, oprávnění zůstávají v CMS
- email je pro admin login klíčový identifikátor
app/admin/*už není centrum business logiky, ale hlavně prezentační a legacy vrstva- při čtení admin kódu je potřeba sledovat jak
app/routes/admin.php, tak příslušný modulovýrouter.phpneboroutes.php