Compiler Extension Nette 2.1 Dev

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

Předem se omlouvám, protože vím, že to bude nějaká blbost, kterou jsem přehlédl nebo nenašel na fóru. Dnes jsem na zkoušku zkusil upgrade Nette na 2.1dev a nějak mi přestal fungovat extension, který ještě v 2.0.10 fungoval zcela normálně.

Bootstrap:

$configurator->onCompile[] = function ($configurator, $compiler) {
	$compiler->addExtension('models', new FakeExtension);
};

Extension:

class FakeExtension extends \Nette\DI\CompilerExtension{

}

Config:

models:
	services:
		articles:
			class: \Models\Articles

Tohle v 2.0.10 fungovalo ještě tak, že se dalo volat:

	$model = $this->context->models->articles;

v 2.1 to vyhodí:

Nette\DI\MissingServiceException

Service 'models' not found.

Nějaké nápady, co by tohle mohlo způsobovat?? Předem děkuji a ještě jednou se omlouvám pokud jsem někde na fóru přehlédl nějakou změnu, která by tohle mohla způsobovat.

Editoval Etch (9. 6. 2013 15:57)

enumag
Člen | 2118
+
0
-

V Nette 2.1 není NestedAccessor, tj. můsíš to změnit takhle:

$model = $this->context->{'models.articles'};

Ale stejně doporučuji raději používat inject* metody nebo @inject anotace…

Etch
Člen | 403
+
0
-

Tady jde právě o přepis „relativně staré“ aplikace, aby používala inject*. Chtěl jsem to psát už rovnou s 2.1, ale tahle „chybka“ mě trochu zaskočila a nemohl jsem si za boha vzpomenout, jak upravit obslužnou metodu, která vrací modely, aby neupravená část aplikace běžela než to bude přepsáno s pomocí inject* a bude se tedy moci tato obezlička kompletně odstranit. :D

Takže díky moc za nakopnutí.