DI nezavisle a registracia cez neon
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- David Grudl
- Nette Core | 8228
Nějak takto si vygeneruješ kontejner (vyžaduje nette/di 2.3-beta a je možné, že v 2.3 final to bude ještě malinko jinak).
(Doplnění: v nové verzi je to jinak)
$classLoader = new Nette\DI\ContainerLoader(__DIR__ . '/temp'); // cesta k tempu
$className = $classLoader->load('', function($className) {
$loader = new Nette\DI\Config\Loader;
$config = $loader->load('config.neon'); // cesta k config.neon
$compiler = new Nette\DI\Compiler;
//$compiler->addExtension($name, ....); // možnost přidat extensions
$code = $compiler->compile($config, $className);
$deps = array_merge(
$loader->getDependencies(),
$compiler->getContainerBuilder()->getDependencies()
);
return array($code, $deps);
});
vytvoříš instanci:
$container = new $className;
a klasicky ho používáš:
$foo = $container->getService('foo');
- David Grudl
- Nette Core | 8228
Jde všechno. Bude to chtít přidat extensions:
$compiler->addExtension('di', new Nette\DI\Extensions\DIExtension(true));
$compiler->addExtension('tracy', new Tracy\Bridges\Nette\TracyExtension(true));
a v configu povolit:
di:
debugger: yes
- David Grudl
- Nette Core | 8228
Ale opakuji, takhle to funguje v 2.3-beta, ve final to může být ještě trošku jinak.
- David Grudl
- Nette Core | 8228
V aktuální 2.3.0-RC se to udělá takto:
$classLoader = new Nette\DI\ContainerLoader(__DIR__ . '/temp'); // cesta k tempu
$className = $classLoader->load('', function($compiler) {
$compiler->loadConfig('config.neon'); // cesta k config.neon
//$compiler->addExtension($name, ....); // možnost přidat extensions
});
- duskohu
- Člen | 778
David Grudl napsal(a):
V aktuální 2.3.0-RC se to udělá takto:
$classLoader = new Nette\DI\ContainerLoader(__DIR__ . '/temp'); // cesta k tempu $className = $classLoader->load('', function($compiler) { $compiler->loadConfig('config.neon'); // cesta k config.neon //$compiler->addExtension($name, ....); // možnost přidat extensions });
Skvele, dakujem :-)