예제 #1
0
 public function process(ehough_iconic_ContainerBuilder $container)
 {
     foreach ($container->getDefinitions() as $id => $definition) {
         if (!($decorated = $definition->getDecoratedService())) {
             continue;
         }
         $definition->setDecoratedService(null);
         list($inner, $renamedId) = $decorated;
         if (!$renamedId) {
             $renamedId = $id . '.inner';
         }
         // we create a new alias/service for the service we are replacing
         // to be able to reference it in the new one
         if ($container->hasAlias($inner)) {
             $alias = $container->getAlias($inner);
             $public = $alias->isPublic();
             $container->setAlias($renamedId, new ehough_iconic_Alias((string) $alias, false));
         } else {
             $definition = $container->getDefinition($inner);
             $public = $definition->isPublic();
             $definition->setPublic(false);
             $container->setDefinition($renamedId, $definition);
         }
         $container->setAlias($inner, new ehough_iconic_Alias($id, $public));
     }
 }
 /**
  * Updates references to remove aliases.
  *
  * @param ehough_iconic_ContainerBuilder $container The container
  * @param string           $currentId The alias identifier being replaced
  * @param string           $newId     The id of the service the alias points to
  */
 private function updateReferences($container, $currentId, $newId)
 {
     foreach ($container->getAliases() as $id => $alias) {
         if ($currentId === (string) $alias) {
             $container->setAlias($id, $newId);
         }
     }
     foreach ($container->getDefinitions() as $id => $definition) {
         $this->sourceId = $id;
         $definition->setArguments($this->updateArgumentReferences($definition->getArguments(), $currentId, $newId));
         $definition->setMethodCalls($this->updateArgumentReferences($definition->getMethodCalls(), $currentId, $newId));
         $definition->setProperties($this->updateArgumentReferences($definition->getProperties(), $currentId, $newId));
     }
 }
 /**
  * Processes the ContainerBuilder to replace references to aliases with actual service references.
  *
  * @param ehough_iconic_ContainerBuilder $container
  */
 public function process(ehough_iconic_ContainerBuilder $container)
 {
     $this->container = $container;
     foreach ($container->getDefinitions() as $definition) {
         if ($definition->isSynthetic() || $definition->isAbstract()) {
             continue;
         }
         $definition->setArguments($this->processArguments($definition->getArguments()));
         $definition->setMethodCalls($this->processArguments($definition->getMethodCalls()));
         $definition->setProperties($this->processArguments($definition->getProperties()));
     }
     foreach ($container->getAliases() as $id => $alias) {
         $aliasId = (string) $alias;
         if ($aliasId !== ($defId = $this->getDefinitionId($aliasId))) {
             $container->setAlias($id, new ehough_iconic_Alias($defId, $alias->isPublic()));
         }
     }
 }