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
+
0
-

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)

smasty
Člen | 90
+
0
-

Tak tej službe injektuj ešte službu cacheStorage. A potom v metóde match() najprv skontroluj, či neexistuje taká položka v cache a až potom sa spýtaj databázy.

m4rty
Člen | 40
+
0
-

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