Manifest modul - Jet\Application_Module_Manifest
Manifest jsou metadata modulu. Fakticky se jedná o soubor manifest.php v adresáři modulu. V tomto souboru jsou metadata uložená klasicky v podobě asociovaného pole.
Třída Jet\Application_Module_Manifest pak s metadaty pracuje. Jednoduše řečeno je to nosič souhrnných informací o modulu. A i zde platí, že pokud vám nevyhovuje tato třída a její implementace, tak si můžete udělat svoji třídu pro manifest a systému ji vnutit pomocí továrny. Jediná podmínka je, aby vaše třída od třídy Jet\Application_Module_Manifest dědila.
A nyní se podívejme, co manifest umí:
Základní metody
Metoda | Význam |
---|---|
public __construct( ?string $module_name = null ) |
Parametr $module_name je nepovinný a to zda je / není specifikován zásadně ovlivňuje chování. Pokud je název modulu předán konstruktoru, tak konstruktor provede celkovou inicializaci. Tedy pomocí volání
Application_Modules::readManifestData( $module_name )
načte data manifestu, ty ověří a inicializuje.Pokud parametr hodnotu nemá, tak je připraven prázdný manifest a inicializace se vůbec neprovádí. Takové chování je potřebné pro nástroje, které mohou generovat nové moduly. |
public getName( ): string |
Vrátí název modulu (např. Content.Articles.Admin) |
public getModuleDir( ): string |
Vrátí plnou cestu k adresáři modulu. |
public getModuleInstallDirPath( ): string |
Vrátí plnou cestu k instalačnímu adresáři modulu. |
public getModuleInstallDictionariesDirPath( ): string |
Vrátí plnou cestu k adresáři slovníků modulu. |
public getNamespace( ): string |
Vrátí jmenný prostor modulu. |
public getVendor( ): string |
Vrátí dodavatele / autora modulu. Jde o informaci získanou ze souboru manifestu. |
public getVersion( ): string |
Vrátí verzi modulu. Jde o informaci získanou ze souboru manifestu. |
public getLabel( ): string |
Vrátí uživatelem čitelný název modulu. Jde o informaci získanou ze souboru manifestu. |
public getDescription( ): string |
Vrátí pro uživatele určený popis modulu. Jde o informaci získanou ze souboru manifestu. |
public isMandatory( ): bool |
Vrátí indikuje zda je / není modul povinný a zda je tedy nutné jej nainstalovat a aktivovat bez ohledu na vůli uživatele. Jde o informaci získanou ze souboru manifestu. |
public isInstalled( ): bool |
Indikuje zda modul je / není nainstalován. |
public isActivated( ): bool |
Indikuje zda modul je / není aktivní. |
ACL - akce a autorizace
Modul může pro systém kontroly autentizace a autorizace poskytnou svou sadu operací, které může provádět a jejichž autorizace má podléhat schválení a kontrole pomocí uživatelských rolí. Na tuto sadu operací se rovněž odkazuje mikrorouter kontroleru.
Ale řekněme to jednoduše. Dejme tomu, že administrační modul bude provádět klasické operace: něco přidávat, něco editovat, něco prohlížet a něco mazat. A pochopitelně je někdy nutné omezovat kdo co smí provádět (jaký uživatel, nebo lépe jaká skupina uživatelů - role). Za tímto účelem má Jet systém uživatelských rolí a řídí oprávnění. Ovšem ten systém musí vědět jaká oprávnění jsou k dispozici - co má vlastně povolovat. A jednou ze sad možných práv jsou právě ACL akce modulů. Tedy zmíněný administrační modul bude mít v manifestu například toto:
return [
// ... ... ...
'ACL_actions' => [
'get_article' => 'Get article data',
'add_article' => 'Add new article',
'update_article' => 'Update article',
'delete_article' => 'Delete article',
],
];
Metoda | Význam |
---|---|
public getACLActions( bool $translate_description = true, ?Locale $translate_locale = null ): array |
Vrátí seznam dostupných akcí. Metoda rovnou překládá popisy akcí pomocí překladače, ale překladu je možno zamezit (parametr $translate_description). Zároveň je možné pro překladači specifikovat konkrétní lokalizaci (pokud není určena, je použita aktuální). |
public hasACLAction( string $action ): bool |
Indikuje zda modul má / nemá konkrétní akci. |
Kontrola kompatibility
V ukázkové aplikaci kontrola kompatibility není implementována. Ovšem pokud bude na Jet postaven ucelený produkt s dlouhým životním cyklem a třeba i komunitou sdílející pro takový produkt určené moduly, tak je kontrola kompatibility nutná. Ovšem její implementace je záležitostí aplikace. Je tisíc cest jak toto dělat a není možné vybrat pouze jednu. Proto Jet (jakožto framework) poskytuje potřebné prostředky jak to udělat, ale již se do toho sám neplete.
Metoda | Význam |
---|---|
public static setCompatibilityChecker( callable $compatibility_checker ): void |
Nastaví callback pro zjišťování kompatibility. Prototyp takového callbacku je:
function ( Application_Module_Manifest $manifest ) : bool
. |
public static getCompatibilityChecker( ): callable |
Vrátí ověřovací callback. |
public isCompatible( ): bool |
Ověří zda je modul kompatibilní a to pomocí callbacku. Pokud ten není nastaven, tak vždy vrátí true. |
Úkládání
Metoda | Význam |
---|---|
public toArray( ): array |
Vrátí data manifestu v podobě asociovaného pole. Používá se pro ukládání manifestu. |
public saveDatafile( ): void |
Zapíše soubor manifestu modulu. Metoda operaci neprovádí, ale volá:
Application_Modules::saveManifest( $this );
|