Jak na cache vlastního routeru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- m4rty
- Člen | 40
Ahoj, mám vytvořený vlastní router a rád bych kešoval routy, které vytváří (počet queries začíná být značně velký :)). Nevím přesně, kam a jak cache začlenit.
V config.neon mám službu databaseRoute, které předávám připojení
k DB
databaseRoute:
class: Storm\DatabaseRoute
arguments: [@dbConnection]
V bootstrap volám službu (nevím, jestli je to správně?)
<?php
$router = $container->router;
$router[] = $container->getService('databaseRoute');
?>
databaseRoute
<?php
function __construct(\NotORM $database) {
$this->database = $database;
}
public function match(\Nette\Http\IRequest $context) {
...vyhledání url v db
}
public function constructUrl(\Nette\Application\Request $request, \Nette\Http\Url $context) {
...
}
?>
Editoval m4rty (14. 8. 2011 11:27)
- m4rty
- Člen | 40
Díky za odpověď. Mám v databázi uložené URL pro každou stránku (např.: admin/news/add). Pro každý url jsem si udělal cache záznam a pojmenoval jsem ho podle url.
<?php
$path = $context->getUrl()->path;
...
$arr = array();
$arr[] = $module .':'.$presenter;
$this->cache->write($path, $arr, array());
..
?>
Nevím jestli je to takhle správně vyřešeno…
Ale nyní řeším problém ve funkci constructUrl(). Tyto URL budu muset ukládat jako další položky cache, nebo to lze vyřešit jinak?
Díky