Czy są na wykopie specjaliści od #symfony #symfony3 ?
Mam apkę w legacy code, którą refaktoruję na coś znośnego. Jest już router, wprowadziłem też kontener DI, pobieram z niego serwisy w kontrolerze (przed wywołaniem kontrolera wstrzykuję kontener do kontrolera). Mogę sobie też pobierać parametry w kontrolerach i przekazywać je do serwisów.
Mam jednak pewien problem:
Otóż nie mogę sobie wstrzyknąć serwisu do kontrolera jako argument metody. Jak próbuję to zrobić to rzuca mi wyjątkiem:
Mam apkę w legacy code, którą refaktoruję na coś znośnego. Jest już router, wprowadziłem też kontener DI, pobieram z niego serwisy w kontrolerze (przed wywołaniem kontrolera wstrzykuję kontener do kontrolera). Mogę sobie też pobierać parametry w kontrolerach i przekazywać je do serwisów.
Mam jednak pewien problem:
Otóż nie mogę sobie wstrzyknąć serwisu do kontrolera jako argument metody. Jak próbuję to zrobić to rzuca mi wyjątkiem:
Controller "APP\V2\Controller\API\TestController::initAction()" requires that you provide a value for the "$facebookService" argument. Either the argument is nullable and no null value has been provided, no default value has been provided or because there is a non optional argument after this one.
Robię taką trochę owijkę legacy code w komponenty symfony. Aktualnie jestem na etapie implementacji wstrzykiwania serwisów jako zależności do kontrolerów. Jednak w żadem sposób nie mogę wymusić automatycznego wstrzykiwania zależności (autowiring, autoconfigure), wszystko muszę opisywać w pliku services.yml, a i tak nie będę mógł później tego wstrzyknąć jako zależności do kontrolera.
Może ktoś, kto grzebał głębiej w symfony, będzie potrafił mi pomóc z tym?
W celu ułatwienia sprawy, dodaję repo na githubie: https://github.com/miedzwin/legacy-framework
Oraz wątek na stackoverflow: https://stackoverflow.com/questions/52221321/symfony-4-1-components-dependency-injection-issues
EDIT:
autowire: true
, to wszystkie serwisy są ładowane do kontenera z tego pliku. Nie muszę tam rejestrować serwisów, jak to było w Symfony <3.3. One są rejestrowane automatycznie, na podstawie tego co jest zapisane w services.yml w linijkach 13-15. Mógłbym się z tobą zgodzić, gdyby do serwisu byłyby przekazywane jakieś argumenty w konstruktorze, ale serwis nie posiada konstruktora.Kolejną rzeczą jest to, że kontrolery są zarejestrowane też jako serwisy, więc wstrzykiwanie powinno działać jako: wstrzykiwanie zależności, jednego serwisu do drugiego. Niestety metoda w klasie ControllerResolver wygląda tak:
protected function instantiateController($class)
{