Použití SearchExtension s Decoratorem

- johnny13
 - Člen | 17
 
Ahoj,
mým cílem v projektu (běžícím na Nette 3 s verzí DI 3.0.3) je mít
automaticky načítané některé (je jich asi většina) služby pomocí
SearchExtension. Každá taková služba dědí od Base*** (např. od
BaseControl nebo BaseEntityRepository) a všechny tyto Base*** obsahují settry,
do niž vkládá závislosti Decorator, tedy klasický případ. Nicméně
řeším problém, že decorator v kombinaci se SearchEntension nic do těchto
settrů nevloží a závislosti (jako např. EntityManager apod.) jsou null. Za
mě je to hrozná škoda, jelikož to pak ubírá hrozně na potenciálu
SearchExtension. Zde bych poprosil o radu, co se s tím dá dělat a zda už
existuje nějaké funkční řešení. Po přečtení pull requestu, který je na
toto téma vydaný, jsem si lokálně ve vendoru v Compileru upravil proměnnou
$last v metodě „processExtensions“ na $last =
$this->getExtensions(Extensions\DecoratorExtension::class) +
$this->getExtensions(Extensions\InjectExtension::class); a dekorování
automaticky načítaných služeb se rozběhlo. Ale neexistuje nějaké nové
lepší řešení? Přikládám pro jistotu i konfiguraci (config.neon) se
search a decorator sekcemi.
<?php
search:
	-
		in: %appDir%/DashboardModule/Components
		classes:
			- *Factory
	-
		in: %appDir%/SignModule/Components
		classes:
			- *Factory
	-
		in: %appDir%/Model/Repository
		extends: App\Model\Repository\BaseEntityRepository
decorator:
	App\Model\UI\BaseControl:
		setup:
			- setTranslator
			- setContainer
			- setEntityManager
			- setCacheStorage
			- setUserStorage
	App\Model\Repository\BaseEntityRepository:
		setup:
			- setEntityManager
	App\Model\Security\BaseAuthenticator:
		setup:
			- setUser
			- setEntityManager
?>
				
- johnny13
 - Člen | 17
 
@MajklNajt Pak tedy nevím, proč dokumentace vede víceméně k tomu samému, co mám v configu v sekci decorator. Nicméně opravdu apeluji na to, že toto vlákno nemá za cíl zjišťovat, zda použití dekorátoru na závislosti je správné či ne, ale zjišťuje jak použít dekorátor v kombinaci se SearchExtension. Poprosil bych tedy další příspěvky mířeny spíše tímto směrem. Myslím, že to pomůže nejen mě, ale i dalším (minimálně těm, co se zajímají o stav zmiňovaného pull requestu). Předem mnohokrát děkuji.

- johnny13
 - Člen | 17
 
@DavidGrudl Omlouvám se, nevím zda něco nedělám špatně, ale stále mi dekorování služeb vyhledaných search extension nefunguje. DI mám ve verzi dev-master, tedy i se zmiňovaným fixem. Můj config je zobrazen v zde v prvním příspěvku. Pokud ale upravim řádek s proměnnou $last v processExtensions upravím na $last = $this->getExtensions(Extensions\InjectExtension::class) + $this->getExtensions(Extensions\DecoratorExtension::class); tak se vše rozběhne.

- David Grudl
 - Nette Core | 8285
 
@johnny13 můžu tě poprosit o nějaký minimální příklad, třeba na webprojectu? Nejsem schopen chybné chování nasimulovat.

- F.Vesely
 - Člen | 369
 
@DavidGrudl Jelikož s tím mám také problém, tak jsem vytvořil příklad https://github.com/…orExtensions