Dynamické načítání modelů – namespaces

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

Podle návodu jsem si chtěl přidat dynamické načítání modelů, ale narazil jsem na problém s namespaces.

Jak předat namespaces Modelloaderu?

Mám rozvršení řešeno tak, že mám v app složku AdminModule, FrontModule, CarModule …
V ní jsou složky presenter, model … a každý model a presenter obsahuje namespace podle toho, v jaké je složce.

Pokud je UserModel ve složce AdminModule, tak se k němu dostanu pomocí new \AdminModule\UserModel()

Jak řešíte na toto loader? Jelikož ten ve zmíněném příkladu nedokáže pracovat s namespaces a tim pádem to nemohu použít.

Za každý nápad Vám děkuji, jelikož jsem nepřišel na to, jak předat namespace loaderu.

Editoval minzo (5. 4. 2012 18:37)

minzo
Člen | 23
+
0
-

Koukám, že Majkl provedl revizi.

Pokud to tedy dobře chápu, tak všechny modely mám vypsat do configu?

Tomáš Votruba
Moderator | 1114
+
0
-

minzo napsal(a):

Podle návodu jsem si chtěl přidat dynamické načítání modelů, ale narazil jsem na problém s namespaces.

Jak předat namespaces Modelloaderu?

Mám rozvršení řešeno tak, že mám v app složku AdminModule, FrontModule, CarModule …
V ní jsou složky presenter, model … a každý model a presenter obsahuje namespace podle toho, v jaké je složce.

Pokud je UserModel ve složce AdminModule, tak se k němu dostanu pomocí new \AdminModule\UserModel()

Jak řešíte na toto loader? Jelikož ten ve zmíněném příkladu nedokáže pracovat s namespaces a tim pádem to nemohu použít.

Za každý nápad Vám děkuji, jelikož jsem nepřišel na to, jak předat namespace loaderu.

Pro správné použití je třeba mít u modelů výhradně namespace Models, tedy (i) složky následovně:

AdminModule
-- presenters
-- templates
CarModule
-- presenters
-- templates
FrontModule
-- presenters
-- templates
models
..

Model je tedy sdílený, mj. abys nemusel mít AdminModule/UserModel, FrontModule/UserModel

Editoval Schmutzka (6. 4. 2012 1:09)

minzo
Člen | 23
+
0
-

Schmutzka: jj díky k tomuhle jsem došel taky :)
Ale podle poslední editace kuchařky už to nemám používat. Proto jsem napsal druhý dotaz. :)

minzo
Člen | 23
+
0
-

Tak jinak. Jak se dostávate k modemlům vy?

Doted jsem využíval HomePageModel::getWelcome();, ale rád bych to nahradil za DI.

Zatím jsem přišel na jediný způsob, který se mi nelíbí z toho důvodu, že musim při vytvoření nového modelu upravit bootstrap.php

$container->addService('model', function(Nette\DI\Container $container) {
		return Nette\ArrayHash::from(array(
				'homepage'  => new HomepageModel($container),
				'user' => new \UserModel($container),
			));
});

Z tohoto důvodu jsem chtěl použít Loader od Majkl578 ,ale díky jeho poslednímu editu , ho prý používat nemáme.

Díky za rady a sdílení know-how. :)

Filip Procházka
Moderator | 4668
+
0
-

Absolutně špatně.

Všechny služby vypíšeme po jedné do konfiguračního souboru, Nette nám to zkompiluje do jedné třídy a tu pak používáme. Ano, všechny služby na jednu hromádku do jednoho containeru. Není důvod, proč by mělo existovat něco jako subcontainery.

V presenteru se k tomu můžeš dostat třeba přes

$this->context->homepageModel;

Až si články nastuduješ a vyzkoušíš, můžeš se ptát co ti nebude jasné ;)

minzo
Člen | 23
+
0
-

HosipLan: Díky už to mám :)

Jako - vidim, že to musim vypisovat ručně, ale alespon sem to posunul o ůroven výš, jelikož je to přesunuto do config.neon

Editoval minzo (9. 4. 2012 11:22)