Jet\MVC_Controller_Router_Action
Po té co jsme si představili třídu Jet\MVC_Controller_Router zbývá do ucelení celého tématu mikrorouteru popsat třídu Jet\MVC_Controller_Router_Action, která představuje definovanou akci mikrorouteru a její pravidla.
Přehled metod
Metoda | Význam |
---|---|
public __construct( MVC_Controller_Router $router, string $controller_action, string $module_action ) |
Kontroler nebudete nikdy volat samostatně, protože instanci akce vytváří mikrorouter při volání jeho metody addAction. Významy parametrů kontruktoru jsou tedy stejné jako parametry zmíněné metody. |
public setResolver( callable $resolver ): static |
Jak jsme si již ukázali v předchozích kapitolách, tak toto je velice důležitá metoda, která v podobě callbacku (nejčastěji anonymní funkce) definuje logiku, která rozhodne o relevanci akce. Callback nemá žádné parametry, ale má vracet bool. |
public resolve( ): bool|string |
Metoda rozhodne o tom, zda je akce relevantní. V praxi ji sami nepoužijete, protože je volána mikrorouterem. |
public setURICreator( callable $URI_creator ): static |
Funkce generování URL byla zmíněna zatím pouze okrajově, tak se na ní zde koukneme detailněji. Jak již bylo dříve uvedeno, tak mikrorouter může být použit i pro generování URL adres jednotlivých akcí. Ukažme si to rovnou konkrétně na příkladu. Máme view a ve view potřebujeme adresu akce pro editaci nějaké entity, kterou má modul spravovat (například článku, zboží v e-shopu a podobně). View skript ale nemá řešit logiku. View skript tedy neví jak má tato adresa vypadat a už vůbec nemá řešit jak ošetřit oprávnění a povolení akci provést. View skript pouze zajímá aby adresu dostal, nebo nedostal a následně podle toho vygeneroval / nevygeneroval příslušné tlačítko. Ve view skriptu tedy můžeme udělat toto:
$edit_URI = $this->controller->getControllerRouter()->action('edit')->URI( $id );
View dostane co potřebuje, ale vy máte kontrolní logiku tam kde má být - tedy v kontroleru.Mimochodem ... Teď je vidět proč view drží instanci kontroleru a kontroler instanci svého mikrorouteru. Není to samoúčelné. Souvisí to spolu a má to svou danou logiku. Teď se přesuneme z view zpět do kontroleru. Mikrorouter a jeho akce pochopitelně URL adresu jen tak z hvězd nevyčte. To je logické. Proto při definici mikrorouteru a jeho pravidel musí být definovám callback, který adresu akce vytvoří. Ukažme si to rovnou na příkladu:
$this->router->action('edit')->setURICreator( function( $id ) {
Jak je vidět na příkladu, tak se u vytvářeče adres počítá s tím, že může (ale nemusí) mít parametry a to v počtu v jakém budete potřebovat. |
public URI( ...$arguments ): string|bool |
Viz metoda setURICreator. |
public authorize( ): bool |
Překontroluje zda je akce dostupná z hlediska oprávnění. Pokud akce není namapovaná na ACL akci aplikačního modulu, pak je automaticky přístup povolen. Jinak je provedena kontrola oprávnění přes autentizační a autorizační systém. Metoda je používána mikrorouterem, ale v praxi ji můžete použít kde budete potřebovat (aplikace pomocí této metody může snadno kontrolovat oprávnění). |
public router( ):MVC_Controller_Router |
Vrátí instanci mikrorouteru ke kterému akce náleží. |
public controller( ):MVC_Controller |
Vrátí instanci kontroleru ke kterému náleží mikrorouter ke kterému náleží akce. |
public getControllerAction( ): string |
Vrátí název akce. |
public getModuleAction( ): string |
Vrátí název ACL akce aplikačního modulu. |