@@ -73,7 +73,6 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class)
7373 ->addBody ('return ?; ' , [array_diff_key ($ builder ->parameters , $ dynamicParams )]);
7474 $ class ->addMember ($ method );
7575
76- $ dynamicParams = array_keys ($ dynamicParams , true , true );
7776 if (!$ dynamicParams ) {
7877 return ;
7978 }
@@ -83,17 +82,23 @@ public function afterCompile(Nette\PhpGenerator\ClassType $class)
8382 $ method = Method::from ([Container::class, 'getDynamicParameter ' ]);
8483 $ class ->addMember ($ method );
8584 $ method ->addBody ('switch (true) { ' );
86- foreach ($ dynamicParams as $ key ) {
85+ foreach ($ dynamicParams as $ key => $ foo ) {
8786 $ value = Helpers::expand ($ this ->config [$ key ] ?? null , $ builder ->parameters );
88- $ value = $ generator ->convertArguments ($ resolver ->completeArguments (Helpers::filterArguments ([$ value ])))[0 ];
89- $ method ->addBody ("\tcase \$key === ?: return ?; " , [$ key , $ value ]);
87+ try {
88+ $ value = $ generator ->convertArguments ($ resolver ->completeArguments (Helpers::filterArguments ([$ value ])))[0 ];
89+ $ method ->addBody ("\tcase \$key === ?: return ?; " , [$ key , $ value ]);
90+ } catch (Nette \DI \ServiceCreationException $ e ) {
91+ $ method ->addBody ("\tcase \$key === ?: throw new Nette \\DI \\ServiceCreationException(?); " , [$ key , $ e ->getMessage ()]);
92+ }
9093 }
9194 $ method ->addBody ("\tdefault: return parent::getDynamicParameter( \$key); \n}; " );
9295
93- $ method = Method::from ([Container::class, 'getParameters ' ]);
94- $ class ->addMember ($ method );
95- $ method ->addBody ('array_map([$this, \'getParameter \'], ?); ' , [$ dynamicParams ]);
96- $ method ->addBody ('return parent::getParameters(); ' );
96+ if ($ preload = array_keys ($ dynamicParams , true , true )) {
97+ $ method = Method::from ([Container::class, 'getParameters ' ]);
98+ $ class ->addMember ($ method );
99+ $ method ->addBody ('array_map([$this, \'getParameter \'], ?); ' , [$ preload ]);
100+ $ method ->addBody ('return parent::getParameters(); ' );
101+ }
97102
98103 foreach ($ this ->dynamicValidators as [$ param , $ expected , $ path ]) {
99104 if ($ param instanceof DynamicParameter) {
0 commit comments