Module - laborci/andesite GitHub Wiki
Module
Modulok konfigurálható singleton objektumok, amiket a rendszer használ. Te is írhatsz, sőt írni is fogsz modulokat! A modulok viselkedését a konfiguráción /etc/ini keresztül tudod definiálni. A modulok mind az Andesite\Core\Module\Module osztályból származnak.
Aliasok
A modulokat alapesetben a modul osztály teljes nevével kell hivatkozni. De mivel ez kényelmetlen, ezért saját nevet is adhatsz a moduljaidnak. Ezt az etc/ini/module/aliases.yml fájlban teheted meg. A kulcs az alias neve, az érték a modul osztály.
# példa:
debug: Application\Module\Debug
alert: Application\Module\Alert
Konfiguráció
Általános konfig
A modulokat konfigurálhatod külön, a konfiguráció sys.module.configs kulcsa alatt a modul neve (vagy aliasa) alatt. Minden modul egyedi konfigurációval rendelkezik. Erre a kulcsra ír a etc/ini/module/module-configs.yml és a etc/ini/module/cli-module-configs.yml is.
Egyedi konfig
A modulok konfigurációját megadhatod a betöltés helyén is.
Modul betöltés
A modulokat betöltését három helyen határozhatod meg. A betöltendő modulokat (vagy azok aliasait) kell felsorolnod az alábbi módon:
attachment-repository:
db:
ghosts:
role-manager:
Ezek üres kulcsokként jelennek meg a konfiguráció megfelelő pontján, de minden kulcson definiálhatod az adott modul saját konfigurációját is, ha például felül szeretnéd definiálni az alap konfigot.
Startup
etc/ini/module/startup-modules.yml
A startup modulok a rendszer alapvető inicializálása után azonnal betöltődnek. Tipikusan a Debug és hibakezelő modulokat érdemes itt betölteni, hogy a további modulbetöltések már felügyelet alatt történjenek.
Base
etc/ini/module/base-modules.yml
A base modulok mindig betöltésre kerülnek, függetlenül attól, hogy melyik mission fut. Tipikusan adatbázis és ghost modulok kerülnek ide.
Mission
Minden egyes mission definiálhat magának szükséges modulokat. Ezeket a mission konfiguráció modules kulcsán adhatod meg.
pl:
# www mission
pattern~: ("www." + sys.domain)
mission: \Application\Mission\Web\Mission
modules:
twig-responder.twig-main ~root: "@src/mission.web/template"
Ez esetben a twig-responder a betöltendő modul és a modul konfig twig-main kulcsára rákerül az adott útvonal.
Php
Modulok további betöltése már csak kód szinten lehetséges a ModuleManager-en keresztül.
Életciklus
A modulok életciklusa több fázisból áll.
Először is az inicializációs fázis, amikor a rendszer betölti az aliasokat, illetve az előre definiált konfigurációkat. Erre jönnek a konkrét modulbetöltések. Ezek két ponton történnek a rendszerben. Egyrészt a startup modulok betöltése gyakorlatilag azonnal, ahogy a rendszer indul. Ezt követi a base modulok betöltése a mission modulokkal együtt, egy körben. Miért fontos ez?
0. regisztráció
A betöltendő modulokat regisztrálja a rendszer, összeszedi az adott modulhoz fellelhető konfigurációkat.
1. setup
Amennyiben a modulnak van setup metódusa, a ModuleManager meghívja azt és paraméterként átadja a konfiguráció tömböt.
2. load
Amennyiben a modulnak van load metódusa a rendszer - miután minden modult setup-olt - meghívja azt, ezzel értesítve a modult, hogy készen áll a működésre. A modulok ezen a ponton tudják deklarálni függőségeiket. A rendszer megvizsgálja a load metódus argumentumait és a megfelelő sorrendben tölti be a modulokat és hívja meg azok load metódusát, biztosítva ezzel a függőségeket.
// GhostManager::load
protected function load(ConnectionFactory $factory, AttachmentRepository $attachmentRepository);
3. run
Amennyiben a modulnak van run metódusa, akkor a rendszer - az összes modul betöltése után - meghívja azt is. A run metódusban a modul szintén megkapja a konfigurációs tömböt.
ModuleManager
add
public static function add($alias, $config)
Modul azonnali betöltése.
register / load
public static function register($alias, $config)
public static function load()
A register és a load metódusok párban járnak. Először regisztrálod a betöltendő modulokat, majd betöltöd őket.
get
public static function get($moduleName, $loaded = true): ?Module
Egy modult tudsz a neve (nem aliasa) alapján elkérni a menedzsertől. Alapvetően csak a betöltött modulokat adja vissza, de ha a második paraméter false, akkor a még load fázison át nem esett modulokat is megkaphatod.
Module
A modulok rendelkeznek egy statikus Module metódussal, amivel a saját példányukat tudják visszaadni, sok esetben ez kényelmesebb, mint a ModuleManager::get hiszen tipusosan adja vissza a modult, így nem kell típus annotációt írni ahhoz, hogy az IDE is követni tudja a kódot.
public static function Module($loaded = true): ?self