Example #1
0
 /**
  * Bootstrap the container.
  *
  * @return self
  */
 private function bootstrapContainer()
 {
     $this->container = new ContainerBuilder();
     $yaml = new Definition('Modrepo\\Configuration\\Yaml', [$this->configPath]);
     $this->container->setDefinition('config', $yaml);
     foreach ($this->getInitialServices() as $service => $class) {
         $this->container->register($service, $class);
     }
     return $this;
 }
 public function setupAuthentication(ContainerInterface $container, $name, $options)
 {
     $container->setParameter("vss_oauth_extension.providers.{$name}.client_id", $options['client_id']);
     $definition = new DefinitionDecorator("vss_oauth.security.auth.{$options['type']}");
     $container->setDefinition("vss_oauth.security.auth.email.{$name}", $definition);
     $definition->replaceArgument(0, $options);
 }
 /**
  * Load a client configuration as a service in the container. A client can use multiple servers
  *
  * @param ContainerInterface $container  The container
  * @param string             $alias      Alias of the client
  * @param array              $config     Base config of the client
  * @param array              $servers    List of available servers as describe in the config file
  * @param boolean            $baseEvents Register base events
  *
  * @throws InvalidConfigurationException
  * @return string the service name
  */
 protected function loadClient($container, $alias, array $config, array $servers, $baseEvents)
 {
     $usedServers = [];
     $events = $config['events'];
     $matchedServers = [];
     if ($config['servers'][0] == 'all') {
         // Use all servers
         $matchedServers = array_keys($servers);
     } else {
         // Use only declared servers
         foreach ($config['servers'] as $serverAlias) {
             // Named server
             if (array_key_exists($serverAlias, $servers)) {
                 $matchedServers[] = $serverAlias;
                 continue;
             }
             // Search matchning server config name
             $found = false;
             foreach (array_keys($servers) as $key) {
                 if (fnmatch($serverAlias, $key)) {
                     $matchedServers[] = $key;
                     $found = true;
                 }
             }
             // No server found
             if (!$found) {
                 throw new InvalidConfigurationException(sprintf('M6WebStatsd client %s used server %s which is not defined in the servers section', $alias, $serverAlias));
             }
         }
     }
     // Matched server congurations
     foreach ($matchedServers as $serverAlias) {
         $usedServers[] = ['address' => $servers[$serverAlias]['address'], 'port' => $servers[$serverAlias]['port']];
     }
     // Add the statsd client configured
     $serviceId = $alias == 'default' ? 'm6_statsd' : 'm6_statsd.' . $alias;
     $definition = new Definition('M6Web\\Bundle\\StatsdBundle\\Client\\Client');
     $definition->setScope(ContainerInterface::SCOPE_CONTAINER);
     $definition->addArgument($usedServers);
     if (isset($config['to_send_limit'])) {
         $definition->addMethodCall('setToSendLimit', array($config['to_send_limit']));
     }
     foreach ($events as $eventName => $eventConfig) {
         $definition->addTag('kernel.event_listener', ['event' => $eventName, 'method' => 'handleEvent']);
         $definition->addMethodCall('addEventToListen', [$eventName, $eventConfig]);
     }
     $container->setDefinition($serviceId, $definition);
     // Add the statsd client listener
     $serviceListenerId = $serviceId . '.listener';
     $definition = new Definition('M6Web\\Bundle\\StatsdBundle\\Statsd\\Listener');
     $definition->addArgument(new Reference($serviceId));
     $definition->addArgument(new Reference('event_dispatcher'));
     $definition->addTag('kernel.event_listener', ['event' => 'kernel.terminate', 'method' => 'onKernelTerminate', 'priority' => -100]);
     if ($baseEvents) {
         $definition->addTag('kernel.event_listener', ['event' => 'kernel.terminate', 'method' => 'onKernelTerminateEvents', 'priority' => 0]);
         $definition->addTag('kernel.event_listener', ['event' => 'kernel.exception', 'method' => 'onKernelException', 'priority' => 0]);
     }
     $container->setDefinition($serviceListenerId, $definition);
     return $serviceId;
 }
 /**
  * Load a dbclient configuration as a service in the container. A client can use multiple servers
  * @param ContainerInterface $container The container
  * @param string             $alias     Alias of the client
  * @param array              $config    Base config of the client
  * @param array              $servers   List of available servers as describe in the config file
  * @param string             $type      db or multi
  *
  * @throws \Symfony\Component\Config\Definition\Exception\InvalidConfigurationException
  * @return void
  */
 protected function loadClient($container, $alias, array $config, array $servers, $type = 'cache')
 {
     $configuration = array('timeout' => $config['timeout'], 'server_config' => array());
     if (array_key_exists('readwritetimeout', $config)) {
         $configuration['read_write_timeout'] = $config['readwritetimeout'];
     }
     if (array_key_exists('reconnect', $config)) {
         $configuration['reconnect'] = $config['reconnect'];
     }
     if ('cache' === $type) {
         // check namespace
         if (!isset($config['namespace'])) {
             throw new InvalidConfigurationException("namespace Parameter for M6Redis cache server is required");
         }
         $configuration['namespace'] = $config['namespace'];
         $configuration['compress'] = $config['compress'];
     }
     $configuration['server_config'] = $this->getServers($servers, $config['servers'], $alias);
     if (count($configuration['server_config']) === 0) {
         throw new InvalidConfigurationException(sprintf("no server found for M6Redis client %s", $alias));
     }
     switch ($type) {
         case 'cache':
             $redisCacheId = sprintf('m6_redis.cache.%s', $alias);
             $container->register($redisCacheId, 'M6Web\\Component\\Redis\\Cache')->addArgument($configuration);
             $serviceId = $alias == 'default' ? 'm6_redis' : 'm6_redis.' . $alias;
             $definition = new Definition($config['class']);
             $definition->addArgument(new Reference($redisCacheId));
             break;
         case 'db':
             $serviceId = $alias == 'default' ? 'm6_dbredis' : 'm6_dbredis.' . $alias;
             $definition = new Definition('M6Web\\Component\\Redis\\DB');
             $definition->addArgument($configuration);
             break;
         case 'multi':
             $serviceId = $alias == 'default' ? 'm6_multiredis' : 'm6_multiredis.' . $alias;
             $definition = new Definition('M6Web\\Component\\Redis\\Multi');
             $definition->addArgument($configuration);
             break;
         default:
             throw new InvalidConfigurationException("Invalid client type");
     }
     $definition->setScope(ContainerInterface::SCOPE_CONTAINER);
     $definition->addMethodCall('setEventDispatcher', array(new Reference('event_dispatcher'), 'M6Web\\Bundle\\RedisBundle\\EventDispatcher\\RedisEvent'));
     $container->setDefinition($serviceId, $definition);
 }