Dynamické načítání modelů – namespaces
- minzo
- Člen | 23
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)
- Tomáš Votruba
- Moderator | 1114
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
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
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
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é ;)