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 ) {
    return 
Http_Request::currentURI( ['id' => $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.
Předchozí kapitola
Jet\MVC_Controller_Router
Další kapitola
Jet\MVC_Controller_Router_AddEditDelete