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%)
-----


zgłupiałem całkiem. Długo głowiłem się czy to
  1. $defDec = new DefinitionDecorator('bar');
  2. $defDec->addMethodCall('setBaz','baz');
  3. $container->setDefinition('foo', $defDec);

oznacza to:
  1. services:
  2. bar
  3. calls:
  4. - [setBaz ,[baz]]
  5. foo
  6. decorates: bar

czy to:
  1. services:
  2. foo
  3. decorates: bar
  4. calls:
  5. - [setBaz ,[baz]]
  6. bar


aż w innych projektach zobaczyłem:
  1. $defDec = new DefinitionDecorator('bar');
  2. $container
  3. ->setDefinition(sprintf('foo'), $defDec)
  4. ->addMethodCall('setBaz','baz');



wreszcie doszedłem, że to przecież wszystko jedno.

Ten post edytował koszykarze 22.02.2016, 03:45:42
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: 10.10.2025 - 17:47