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 | 8205
@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