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