Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony2][Symfony][SF]Cannot autowire service/but no such service exists
symer
post 5.07.2018, 18:24:53
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 24.08.2017

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
Pilsener
post 6.07.2018, 11:54:42
Post #2





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
symer
post 7.07.2018, 17:52:52
Post #3





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 24.08.2017

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował symer 7.07.2018, 17:53:59
Go to the top of the page
+Quote Post
Pilsener
post 7.07.2018, 22:20:03
Post #4





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Pilsener 7.07.2018, 22:21:24
Go to the top of the page
+Quote Post
symer
post 8.07.2018, 07:34:08
Post #5





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 24.08.2017

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 16:20