Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Symfony]DependencyInjection/Extension.php i DefinitionDecorator, definicja dekoratora bez klasy?
koszykarze
post
Post #1





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 10.10.2015
Skąd: Warszawa

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


uczę się Services, DI, compilerPass, Extension, Configuration. Patrzę w FOSElasticaBundle.

Patrzę w DependencyInjection/FOSElasticaExtension.php

  1. class FOSElasticaExtension extends Extension
  2. {
  3. public function load(array $configs, ContainerBuilder $container)
  4. {
  5. //code
  6.  
  7. $this->loadClients($config['clients'], $container);
  8.  
  9. //code
  10. }
  11.  
  12. /**
  13.   * Loads the configured clients.
  14.   *
  15.   * @param array $clients An array of clients configurations
  16.   * @return array
  17.   */
  18. private function loadClients(array $clients, ContainerBuilder $container)
  19. {
  20. foreach ($clients as $name => $clientConfig) {
  21. $clientId = sprintf('fos_elastica.client.%s', $name);
  22. $clientDef = new DefinitionDecorator('fos_elastica.client_prototype');
  23. $clientDef->replaceArgument(0, $clientConfig);
  24. $clientDef->addTag('fos_elastica.client');
  25. $container->setDefinition($clientId, $clientDef);
  26.  
  27. $this->clients[$name] = array(
  28. 'id' => $clientId,
  29. 'reference' => new Reference($clientId),
  30. );
  31. }
  32. }



chwilę wcześniej uczyłem się o dekoratorach w service container. Wynikało z tego, że jednak klasa definiowanego dekoratora musi być napisana też w php. Czyli co, powyżej sobie dynamicznie tworzę definicje serwisów tj dekoratory bez podania klasy?

a może tworząc obiekt DefinitionDecorator, wrzucając do konstruktora id dekorowanej definicji ('fos_elastica.client_prototype') to dekorator dziedziczy klasę dekorowanego serwisu?

Ten post edytował koszykarze 18.02.2016, 04:48:56
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
koszykarze
post
Post #2





Grupa: Zarejestrowani
Postów: 119
Pomógł: 0
Dołączył: 10.10.2015
Skąd: Warszawa

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


Bardziej mi chodziło z punktu widzenia użycia dekoratora 'foo' - że to wszystko jedno.
Serwis dekorowany 'bar' zostaje niezmieniony.
Dla ścisłości, czyli ten drugi jest poprawny, tak?


Jeszcze miałbym pytanie z beczki obok.
w kodzie z pierwszego postu w pętli jest fragment:
  1. $clientDef = new DefinitionDecorator('fos_elastica.client_prototype');
  2. $clientDef->replaceArgument(0, $clientConfig);

typem pierwszego argumentu konstruktora klasy serwisu 'fos_elastica.client_prototype' jest array(), a $clientConfig w pętli raz pochodzi od arrayNode innym razem scalarNode
edit: a dobra, to dzięki ->prototype('array')

Ten post edytował koszykarze 22.02.2016, 18:39:53
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 13.10.2025 - 00:35