Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony][SF]Cannot autowire service/but no such service exists
Forum PHP.pl > Forum > PHP > Frameworki
symer
Próbuje wstrzyknąć obiekt do service ale niestety wyskakuje mi błąd: Cannot autowire service ... but no such service exists :

"Fatal error: Uncaught exception 'Symfony\Component\DependencyInjection\Exception\AutowiringFailedException' with message 'Cannot autowire service "AppBundle\Service\ValidResponse": argument "$filter" of method "__construct()" references class "Symfony\Component\HttpKernel\Event\FilterResponseEvent" but no such service exists. It cannot be auto-registered because it is from a different root namespace.' in C:\xampp\htdocs\heroku\testsymf\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Compiler\AutowirePass.php:285 Stack trace: #0 C:\xampp\htdocs\heroku\testsymf\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Compiler\AutowirePass.php(217): Symfony\Component\DependencyInjection\Compiler\AutowirePass->autowireMethod(Object(ReflectionMethod), Array) #1 C:\xampp\htdocs\heroku\testsymf\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Compiler\AutowirePass.php(140): Symfony\Component\DependencyInjection\Compiler\AutowirePass->autowireCalls(Object(ReflectionClass), Array, Array) #2 in C:\xampp\htdocs\heroku\testsymf\vendor\symfony\symfony\src\Symfony\Component\DependencyInjection\Compiler\AutowirePass.php on line 285"

  1. namespace AppBundle\Service ;
  2. use Symfony\Component\HttpKernel\Event\FilterResponseEvent as FilterReponse;
  3. class ValidResponse
  4. {
  5. protected $filter;
  6. public function __construct(FilterReponse $filter)
  7. {
  8. $this->filter = $filter;
  9. }
  10.  
  11.  
  12. }
Pilsener
A jaki efekt chcesz uzyskać? Eventów nie używa się w ten sposób, tu masz przykład:
https://symfony.com/doc/current/event_dispa...er_filters.html
symer
Ok. Ale jak Chce wskrzyknąć inny obiekt , który nie jest Eventem a także service wtedy mi też błąd taki wyskoczy. To jak stworzyć z jakiegoś obiektu Service.Tak abym mógł go wstkrzynąć?
Chce przefiltrować dane z obiektu response? Po prostu mieć dostęp do tych danych . Jak to zrobić?
Pilsener
Cytat
Ale jak Chce wskrzyknąć inny obiekt , który nie jest Eventem a także service wtedy mi też błąd taki wyskoczy
- nie wyskoczy, jeśli ten obiekt może być serwisem. W komunikacie wyjątku jest podpowiedź. Jeśli masz normalny serwis utworzony np. w namespace /App/Service to możesz go wstrzykiwać do innych serwisów.

Cytat
Chce przefiltrować dane z obiektu response?
- a skąd się bierze ten response? Logika tworzenia aplikacji www jest taka, że najpierw tworzy się response a potem wysyła go do przeglądarki. Oczywiście są wyjątki, np. mamy bibliotekę, która nam generuje odpowiedzi ale nie chcemy/nie możemy jej zmieniać.
Wtedy z pomocą przychodzi wzorzec obserwator i jeśli biblioteka/framework to implementuje, to możemy zarejestrować odbiornik, przechwycić odpowiednie zdarzenie i coś z nim zrobić.
W Symfony lista zdarzeń jest tutaj:
http://symfony.com/doc/current/reference/events.html

Wystarczy się podpiąć pod odpowiednie zdarzenie i już masz dostęp do obiektu Response, zanim zostanie wysłany do przeglądarki.

I oczywiście jest to zła praktyka.
symer
NO właśnie o to mi chodzi, że ten obiekt response jest generowany gdzie indziej. I po prostu Chciałem przefiltrować te dane i coś dorzucić do tego obiektu response i wtedy wysłać.
Taka ma być logika. To spróbuje za pomocą tego obserwatora.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.