Samostané routy pro moduly

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
webdata
Člen | 153
+
0
-

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

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.