Toto je staršia verzia dokumentu!
Router slúži na generovanie URI adries na základe dopredu nadefinovaných parametrov. Spätné zavolanie tejto URI vyvolá našu funkciu. Parametre môžu byť verziované.
Na definovanie ciest sa treba zaregistrovať na počúvanie broadcastu router/defineRoutes
.
$this->app->cc_setListener("router/defineRoutes", "bMyRouter/bDefineRoutes");
function bDefineRoutes(iBroadcastEvent $e) { # Existujúce cesty (routy) sú zadefinované v $e->getRefData(); $routes = &$e->getRefData(); # Môja nová routa $routes["my_route1"] = array( # CoolName "coolName" => "cesta1", # callback - funkcia, ktorá sa zavolá, keď zavoláme vygenerovanú cestu "callback" => array(&$this, "myRouteCallback"), # arguments - parametre "arguments" => array( # "1" - verzia parametrov "1" => array( "meno", "vek", ), ), ); } function myRouteCallback($settings = array(), $argumentsVersion = NULL) { echo "Callback, argumentsVersion=$argumentsVersion<br>\n"; var_export($settings); }
Použitie v reálnom kóde:
$router = $this->app->initCoreModule("router"); echo $router->getRoute("my_route1", array( "meno" => "Jozef", "vek" => 24, ));
Použitie v Smarty šablóne:
{getRoute routeIdf="my_route1" meno="Jozef" vek=24}
Výstup v obidvoch prípadoch bude:
http://studio2.local/r/cesta1/1/Jozef/24
Parameter coolName
určuje, čo bude zobrazené vo výslednej URI adrese.
Môže byť string
alebo array
.
Ak bude array
, potom môže obsahovať informáciu o kóde jazyka, pre ktorý je dané coolName určené.
$routes["my_route1"] = array( "coolName" => "cesta1", # ...
Skript bude reagovať na URL adresu
http://studio2.local/r/cesta1/1/Jozef/24
$routes["my_route1"] = array( "coolName" => array( "cesta1", "moja-cesta1", "my-path1", ), # ...
Skript bude reagovať na URL adresy:
http://studio2.local/r/cesta1/1/Jozef/24
http://studio2.local/r/moja-cesta1/1/Jozef/24
http://studio2.local/r/my-path1/1/Jozef/24
$routes["my_route1"] = array( "coolName" => array( "cesta1" => "sk", "moja-cesta1" => "sk", "my-path1" => "en", ), # ...
Skript bude reagovať na adresy ako v predchádzajúcom prípade.
Pri generovaní cesty pomocou getRoute()
máme možnosť zvoliť, ktorý coolName sa použije na základe parametra langId
.
Ak nebude parameter langId
nastavený, SystemOmega sa bude snažiť použiť jazyk podľa aktuálne prihláseného užívateľa.
Príklad, v ktorom budeme preferovať anglický jazyk:
$router = $this->app->initCoreModule("router"); echo $router->getRoute("my_route1", array( "meno" => "Jozef", "vek" => 24, ), array( "langId" => "en", ));
{getRoute routeIdf="my_route1" routeLangId="en" meno="Jozef" vek=24}
Výstup v obidvoch prípadoch bude:
http://studio2.local/r/my-path1/1/Jozef/24
Parameter coolName
určuje, čo bude zobrazené vo výslednej URI adrese.
Môže byť string
alebo array
.
Ak bude array
, potom môže obsahovať informáciu o kóde jazyka, pre ktorý je dané coolName určené.
$routes["my_route1"] = array( "coolName" => "cesta1", # ...
Skript bude reagovať na URL adresu
http://studio2.local/r/cesta1/1/Jozef/24
$routes["my_route1"] = array( "coolName" => array( "cesta1", "moja-cesta1", "my-path1", ), # ...
Skript bude reagovať na URL adresy:
http://studio2.local/r/cesta1/1/Jozef/24
http://studio2.local/r/moja-cesta1/1/Jozef/24
http://studio2.local/r/my-path1/1/Jozef/24
$routes["my_route1"] = array( "coolName" => array( "cesta1" => "sk", "moja-cesta1" => "sk", "my-path1" => "en", ), # ...
Skript bude reagovať na adresy ako v predchádzajúcom prípade.
Pri generovaní cesty pomocou getRoute()
máme možnosť zvoliť, ktorý coolName sa použije na základe parametra langId
.
Ak nebude parameter langId
nastavený, SystemOmega sa bude snažiť použiť jazyk podľa aktuálne prihláseného užívateľa.
Príklad, v ktorom budeme preferovať anglický jazyk:
$router = $this->app->initCoreModule("router"); echo $router->getRoute("my_route1", array( "meno" => "Jozef", "vek" => 24, ), array( "langId" => "en", ));
{getRoute routeIdf="my_route1" routeLangId="en" meno="Jozef" vek=24}
Výstup v obidvoch prípadoch bude:
http://studio2.local/r/my-path1/1/Jozef/24
/** * * @param string $routeIdf * Identifikátor routy * * @param array $arguments * Parametre do routy * * @param array $settings * @param string $settings["coolName"]=NULL * @param string $settings["langId"]=NULL * @param string $settings["separator"]="&" * @param string $settings["anchor"]=NULL * @param string $settings["disableCoolUri"]=FALSE * * @return string */ function getRoute($routeIdf, $routeArguments = array(), $settings = array());