/** * Return a ClassGenerator * * @param BaseBundle $bundleInfos * @param string $class Class name * @param string $interface Interface to use, just class name * @return ClassGenerator */ protected function initGenerator(BaseBundle $bundleInfos, $class, $interface) { $return = new ClassGenerator(); $return->setClassName($class); $return->setNamespace($bundleInfos->getNamespace() . '\\Service\\Install'); $return->setTraits(array('kujaff\\VersionsBundle\\Model\\BundleNameFromClassName', 'kujaff\\VersionsBundle\\Model\\DoctrineHelper')); $return->setExtends('Symfony\\Component\\DependencyInjection\\ContainerAware'); $return->addUse('kujaff\\VersionsBundle\\Model\\' . $interface, 'Base' . $interface); $return->addInterface('Base' . $interface); $return->setConcatTraits(true); return $return; }
/** * Generate full \Service class, with all services as methods * * @throws ServicesNotFoundException */ protected function generateFullServicesShortcuts() { $cachedFile = $this->container->getParameter('debug.container.dump'); if (!is_file($cachedFile)) { throw new ServicesNotFoundException('Service list not found. Parameter "debug.container.dump" doesn\'t exists. Try to clear cache and try again.'); } $builder = new ContainerBuilder(); $loader = new XmlFileLoader($builder, new FileLocator()); $loader->load($cachedFile); $generator = new ClassGenerator(); $generator->setExtractUses(false); $generator->setClassName('Service'); foreach ($builder->getServiceIds() as $id) { if (preg_match('/^[a-zA-Z]{1}/', $id) === false) { continue; } else { if ($builder->hasDefinition($id)) { $definition = $builder->getDefinition($id); } else { if ($builder->hasAlias($id)) { $alias = $builder->getAlias($id); $definition = $builder->getDefinition($alias); } else { continue; } } } if ($definition->isPublic()) { $method = new Method(str_replace('.', '__', $id)); $method->setIsStatic(true); $method->setReturn($this->getServiceClass($id, $definition)); $method->addLine('return _service(\'' . $id . '\');'); $generator->addMethod($method); } } $generator->write($this->getFileName()); }