Nette 3.0 nahrazení za loadDefinition

před 2 měsíci

Barbarossa
Backer | 56
+
0
-

Ahoj,

existuje už někde návod jak migrovat na Nette DI 3.0? Nejsem v tom zběhlý, a tak s tím docela bojuju. Dneska to je loadDefinition, které je v 3.0 označené jako deprecated s pomocnou hláškou: loadDefinition() is deprecated.

mám tento kus kódu, který bych rád převedl, asi do loadDefinitions, ale nevím jak…

// převzato z  contributte/flysystem
$processor = $builder->addDefinition($adapterName)
    ->setAutowired(false);

Compiler::loadDefinition($processor, $args['adapter']);  //$args['adapter'] je Statement (DI)

Díky za pomoc.

před 2 měsíci

David Grudl
Nette Core | 6829
+
0
-

Návod, jak migrovat, zatím není, protože ještě nevyšla ostrá verze a některé věci se mohou měnit.

Co přesně potřebuješ zmigrovat?

před 2 měsíci

Barbarossa
Backer | 56
+
0
-

Aha díky, nevšiml jsem si že DI je beta (zatímco většina je RC). Zkouším balíky z Contributte (na Nette 3) a už je mi jasné proč se nikdo nehrne do aktualizování repozitářů…

Můj názor je takový, že nikdo jiný zřejmě to DI lépe nenapíše, a pokud jsi přesvědčený, že to máš napsané dobře a má to budoucnost tak se hold vývojáři rozšíření musí přizpůsobit… nebo nevím kolik návrhů na zlepšení denně od nich dostáváš.

Mě by zatím zajímal ten přepis toho výše uvedeného kódu, je to nějak takhle?
Celý 2.4 kod je zde

$processor = $builder->addDefinition($adapterName)
    ->setAutowired(false);

$this->compiler->loadDefinitions([$args['adapter']], $adapterName);

Editoval Barbarossa (3. 2. 15:39)

před 2 měsíci

David Grudl
Nette Core | 6829
+
+1
-

Rozumím o co jde, najdu nějaký způsob, jak to řešit.

před měsícem

David Grudl
Nette Core | 6829
+
+1
-

Statické metody Compiler::loadDefinition() a loadDefinitions() nahradily nestatické Compiler::loadDefinitionsFromConfig(array $config) a CompilerExtension::loadDefinitionsFromConfig(array $config), kde $config je pole definic služeb (vlastně obsah sekce services:).

Rozdíl mezi metodou ze třídy Compiler a CompilerExtensions je ten, že ta v CompilerExtension prefixuje názvy tříd názvem extension.

Takže v uvedeném kódu contributte/flysystem by se použilo

$this->compiler->loadDefinitionsFromConfig([$adapterName => $args['adapter']]);

Je tam $this->compiler, protože $adapterName už je prefixovaný.

edit: loadDefinitionsFromConfig