RouterFactory a přístup k persistentnímu parametru
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- cronos
- Člen | 6
Ahoj,
mám naprogramovaný modul s články, v databázi mám u každého
článku uloženou i cool url a pomocí RouterFactory tyto url přepisuju. Web
je více jazyčný a jazyk nastavuji persistentním parametrem $locale ve
FrontBasePresenteru.
CoolUrl si kešuji a následně načítám.
Mám to řešené takto v RouterFactory.php a funguje to.
config.nenon
- App\RouterFactory
router: @App\RouterFactory::createRouter
RouterFactory.php
public function createRouter() {
$router = new RouteList;
// Admin
$router[] = new Route('admin/<presenter>/<action>/<id>', array(
'module' => 'Admin',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
// Route for pages module
$router[] = new Route('<locale>/<id>', array(
'id' => array(
Route::FILTER_IN => function ($id) {
if (is_numeric($id)) {
return $id;
} else {
$page = array_flip($this->pages->getUriCache()->load('pagesUri'));
if (array_key_exists($id, $page)) {
return $page[$id];
} else {
$e = explode('-', $id);
$cutId = array_pop($e);
return is_numeric($cutId) ? $cutId : FALSE;
}
}
},
Route::FILTER_OUT => function ($id) {
if (!is_numeric($id)) {
return $id;
} else {
$page = $this->pages->getUriCache()->load('pagesUri');
return array_key_exists($id, (array) $page) ? $page[$id] : $id;
}
}
),
'locale' => 'cs',
'module' => 'Front',
'presenter' => 'Page',
'action' => 'page',
));
// Basic front router
$router[] = new Route('[<locale>/]<presenter>/<action>/<id>', array(
'locale' => 'cs',
'module' => 'Front',
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
return $router;
}
Nyní bych ale chtěl nastavovat rozdílné cool url pro různé jazyky. Pro jednotlivé jazyky mám jednotlivé soubory v cache. Abych to ale mohl rozběhat, potřebuji do následující části kódu protlačit persistentní parametr $locale, podle kterého už si načtu požadovanou cache a nevím si rady jak. Prosím tedy o radu jak toto provést.
'id' => array(
Route::FILTER_IN => function ($id) {
if (is_numeric($id)) {
return $id;
} else {
$page = array_flip($this->pages->getUriCache()->load('pagesUri'));
.....
.....
Editoval cronos (1. 2. 2017 14:11)