Jak na cache vlastního routeru

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

RSS tématu Téma zavřeno