Samostané routy pro moduly
- webdata
- Člen | 153
Zdravím,
Mám následující problém s modulární aplikací. Aplikace se skládá z modulu, které aktivuji v config.neon.
Používám verzi nette 2.1 dev
Adresářová struktura je (je to jen example – nebudu to zde vypisovat cely):
app
config
config.neon
modules
PageModule
config
config.neon
DI
extension.php
AdminModule <- AMINISTRAČNÍ ČÁST MODULU
presenter <- presentery administrace (namespace AdminModule\PageModule)
templates
presenters <- FRONT-END modulu (namespace PageModule)
templates
model <- modely modulu
etc <- tady je temp, log, a nějaké další soubory
libs <- zde je nette a další knihovny
Veškere věci vycházi ze základniho sandboxu co je v 2.1 dev
Do configu v app/config jsem dopsal:
extensions:
pageModules: \PageModule\DI\Extension
V bootstrap je pak přidané:
$configurator->onCompile[] = function (\Nette\Config\Configurator $configurator, \Nette\DI\Compiler $compiler) {
$compiler->addExtension('extensions', new ExtensionsList);
};
Třída extensionList je:
final class ExtensionsList extends \Nette\DI\CompilerExtension
{
public function loadConfiguration()
{
foreach ($this->getConfig() as $name => $class) {
$this->compiler->addExtension($name, new $class);
}
}
}
Tim se dostávam k tomu ze se zavede PageModule/DI/extension.php
ten vypadá takto a možná zde je ten problém:
namespace PageModule\DI;
final class Extension extends \Nette\DI\CompilerExtension
{
public function loadConfiguration()
{
$config = $this->loadFromFile(__DIR__ . '/../config/config.neon');
$this->compiler->parseServices($this->containerBuilder, $config);
}
}
Tohle by mělo zavest dodatečnou kofiguraci pro daný modul. Jako service modelu, formulare, no proste klasika. Ale hlavně roty ktere se jaxi taxi nějak nezavádí. Mám tam standardní factoryrouter ze seanboxu ale třeba tento modul pro frond end ma mít routu, kterou kdyz zadam do factory router ta to funguje.
$router[] = new Route('<slug .+>-a<id [0-9]+>', 'Pages:Default:default');
Ale kdyz ji vyhodim pryc a chci ji definovat nekde v modulu kde mne napadl config.neon v ceste modules PageModule/config/config.neon a to
nette:
routing:
debugger: true
routes:
'<slug .+>-a<id [0-9]+>': Pages:default:default
Tak to nejak nefunguje. Vím že to je jen experimetalni fičura.
Jde mi o to že když proste ten modul zapoznamkuju v konfigu, tak proste nebude aktivni a to vcetne této routy. Roura uvedena v config.neon se vubec nenacte.
Snad jste to pochopily. Ale v kostce: Aplikace je z modulu, co ma vlastni extension, modely, presenter pro frontend a backend, konfiguraci, šablony a routy. A jednoduchym uvedenim do config tento modul stim vším aktivuji. To vše funguje až na ty routy.
Předem dík za rady.
Editoval webdata (2. 11. 2013 19:49)
- enumag
- Člen | 2118
Zavedl bych nějaký tag pro routery. Extension každého modulu by mělo svou RouterFactory která by vytvořila RouteList, ten by byl též jako služba ale s vypnutým autowiringem a nastaveným zmíněným tagem. Celá aplikace by pak měla další RouterFactory která by si vytáhla routery z containeru na základě toho tagu a poskládala z nich finální router.