Routy z databáze vč. statických rout
- Tirus91
- Člen | 199
Obracím se na Vás s prosbou jak správně udělat následující routy
<?php
namespace App;
use \Nette\Application\Routers\Route,
\Nette\Application\Routers\RouteList;
/**
* Router factory.
*/
class RouterFactory {
/** @var \Tirus\Repository\RouterRepository * */
private $routerRepository;
public function __construct(\Tirus\Repository\RouterRepository $rr) {
$this->routerRepository = $rr;
}
/**
* @return \Nette\Application\IRouter
*/
public function createRouter() {
$router = new RouteList();
$prefix = '';
$suffix = '';
$list = glob(__DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . '*Module');
foreach ($list as $modul) {
if (class_exists('\\Tirus\\' . basename($modul) . '\\Router')) {
eval('$router = \\Tirus\\' . basename($modul) . '\\Router::createRoutes($router,$prefix,$suffix);');
}
}
$router[] = $frontModule = new RouteList('Front');
foreach ($this->routerRepository->findByModule('Front') as $rr) {
$frontModule[] = new Route($rr->slug, array('presenter' => $rr->presenter, 'action' => $rr->action, 'id' => $rr->paramId));
}
$frontModule[] = new Route('activation/<id>', array(
'presenter' => 'Account',
'action' => 'activation',
'id' => NULL,
));
$frontModule[] = new Route('Attachment/<uri>.<ext>', array(
'presenter' => 'Attachment',
'action' => 'viewext',
'uri' => NULL,
'ext' => null,
));
$frontModule[] = new Route('humans.txt', array(
'presenter' => 'Homepage',
'action' => 'humanstxt',
'id' => NULL,
));
$frontModule[] = new Route('<presenter>/<action>/<id>[/<title>]', array(
'presenter' => 'Homepage',
'action' => 'default',
'id' => NULL,
));
$frontModule[] = new Route('index.php', 'Front:Default:default', Route::ONE_WAY);
return $router;
}
}
<?php
namespace Tirus\AdminModule;
use \Nette\Application\Routers\RouteList,
\Nette\Application\Routers\Route;
class Router {
static function createRoutes($router, $prefix = null, $suffix = null) {
$router[] = $adminModule = new RouteList('Admin');
$prefix = '';
$suffix = '';
$list = glob(__DIR__ . DIRECTORY_SEPARATOR . '*Module');
foreach ($list as $modul) {
if (class_exists('\\Tirus\\AdminModule\\' . basename($modul) . '\\Router')) {
eval('$adminModule = \\Tirus\\AdminModule\\' . basename($modul) . '\\Router::createRoutes($adminModule,$prefix,$suffix);');
}
}
$adminModule[] = new Route('Administration/navigations/<id>', array(
'presenter' => 'Navigation',
'action' => 'default',
'id' => NULL,
));
$adminModule[] = new Route('Administration/<presenter>/<action>/<id>', array(
'action' => 'default',
'presenter' => 'Homepage',
'id' => NULL,
));
return $router;
}
}
Ten eval co tam je, bych nahradil například routy z DB a nebo např. jak mi bylo již porazeno Flame/modules Ale jak nahradit tu část kde routy načítám z DB? Příjde mi hloupost si je všechny načíst z DB. Když si vemu, že tma může být klidně milion rout
Má tu někdo zkušenosti s tím Flame/Modules? Nějak se v tom dost ztrácím
- David Matějka
- Moderator | 6445
1. eval je zbytecna prasarna, muzes pouzit treba tohle
$route = call_user_func_array(array($className, 'createRoutes'), array($router, $prefix, $suffix));
2. udelej si vlastni databazovy router, viz https://github.com/…outerExample,
edit:
nebo proste pouzij masku routy <slug>
a pridej si tam
globalni FILTER_IN a FILTER_OUT, viz en
doc (trochu niz to tam je, „global filters“)
Editoval matej21 (23. 9. 2014 22:30)
- Tirus91
- Člen | 199
@matej21
k tomu evalu, jsem dobře pochopil. To hned upravím a vyzkouším.
ale zbytek? jsem dost mimo mísu
Já to nyní provádím takto (i když to tu @DavidGrudl „pomlouval“, kvůli zbytečným dotazům)
mám tabulku kde je slug a k němu příslušný presenter, action a ID
Když chci vygenerovat URL, tak dělám něco takovéhoto {plink :Front:Articles:view $article->id} Mám aplikaci, která nyní má 3 moduly, z toho např. galerie, má administraci způsobem, že je submodulem modulu administrace.
Příklad https://github.com/…outerExample mi je jasnějšší než en doc , ale i tak trochu stejně nejasný. Prosím vysvětlil bys mi jak to funguje, nebo mne odkázal někam, kde to je vysvětlené?
-- edit
v metodě match() není řešen modul, jak ho tam mohu
vyřešit?
-- edit2
co koukám, v tom příkladu je slug ke každé entitě (to jsem dřív také
měl – takže bych to vrátil. měl jsem to pojmenovaní jen jako URI).. ale
k čemu je tam samotná tabulka slugs?
Editoval Tirus91 (23. 9. 2014 23:32)