Change Knplabs to Knp. BC break before Symfony2 release.
This commit is contained in:
129
DependencyInjection/KnpGaufretteExtension.php
Normal file
129
DependencyInjection/KnpGaufretteExtension.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
namespace Knp\Bundle\GaufretteBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Component\Config\Definition\Processor;
|
||||
use Symfony\Component\Config\FileLocator;
|
||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Component\DependencyInjection\DefinitionDecorator;
|
||||
use Symfony\Component\DependencyInjection\Reference;
|
||||
use Symfony\Component\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
|
||||
|
||||
/**
|
||||
* The Gaufrette DIC extension
|
||||
*
|
||||
* @author Antoine Hérault <antoine.herault@gmail.com>
|
||||
*/
|
||||
class KnpGaufretteExtension extends Extension
|
||||
{
|
||||
private $factories = null;
|
||||
|
||||
/**
|
||||
* Loads the extension
|
||||
*
|
||||
* @param array $configs
|
||||
* @param ContainerBuilder $container
|
||||
*/
|
||||
public function load(array $configs, ContainerBuilder $container)
|
||||
{
|
||||
$processor = new Processor();
|
||||
|
||||
// first assemble the adapter factories
|
||||
$factoryConfig = new FactoryConfiguration();
|
||||
$config = $processor->processConfiguration($factoryConfig, $configs);
|
||||
$factories = $this->createAdapterFactories($config, $container);
|
||||
|
||||
// then normalize the configs
|
||||
$mainConfig = new MainConfiguration($factories);
|
||||
$config = $processor->processConfiguration($mainConfig, $configs);
|
||||
|
||||
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
|
||||
$loader->load('gaufrette.xml');
|
||||
|
||||
foreach ($config['adapters'] as $name => $adapter) {
|
||||
$adapters[$name] = $this->createAdapter($name, $adapter, $container, $factories);
|
||||
}
|
||||
|
||||
$map = array();
|
||||
foreach ($config['filesystems'] as $name => $filesystem) {
|
||||
$map[$name] = $this->createFilesystem($name, $filesystem, $container, $adapters);
|
||||
}
|
||||
|
||||
$container->getDefinition('knp_gaufrette.filesystem_map')
|
||||
->replaceArgument(0, $map);
|
||||
}
|
||||
|
||||
private function createAdapter($name, array $config, ContainerBuilder $container, array $factories)
|
||||
{
|
||||
$adapter = null;
|
||||
foreach ($config as $key => $adapter) {
|
||||
if (array_key_exists($key, $factories)) {
|
||||
$id = sprintf('gaufrette.%s_adapter', $name);
|
||||
$factories[$key]->create($container, $id, $adapter);
|
||||
|
||||
return $id;
|
||||
}
|
||||
}
|
||||
|
||||
throw new \LogicException(sprintf('The adapter \'%s\' is not configured.', $name));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Reference a reference to the created filesystem
|
||||
*/
|
||||
private function createFilesystem($name, array $config, ContainerBuilder $container, array $adapters)
|
||||
{
|
||||
if (!array_key_exists($config['adapter'], $adapters)) {
|
||||
throw new \LogicException(sprintf('The adapter \'%s\' is not defined.', $config['adapter']));
|
||||
}
|
||||
|
||||
$adapter = $adapters[$config['adapter']];
|
||||
$id = sprintf('gaufrette.%s_filesystem', $name);
|
||||
|
||||
$container
|
||||
->setDefinition($id, new DefinitionDecorator('knp_gaufrette.filesystem'))
|
||||
->replaceArgument(0, new Reference($adapter))
|
||||
;
|
||||
|
||||
if (!empty($config['alias'])) {
|
||||
$container->setAlias($config['alias'], $id);
|
||||
}
|
||||
|
||||
return new Reference($id);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates the adapter factories
|
||||
*
|
||||
* @param array $config
|
||||
* @param ContainerBuilder $container
|
||||
*/
|
||||
private function createAdapterFactories($config, ContainerBuilder $container)
|
||||
{
|
||||
if (null !== $this->factories) {
|
||||
return $this->factories;
|
||||
}
|
||||
|
||||
// load bundled adapter factories
|
||||
$tempContainer = new ContainerBuilder();
|
||||
$parameterBag = $container->getParameterBag();
|
||||
$loader = new XmlFileLoader($tempContainer, new FileLocator(__DIR__.'/../Resources/config'));
|
||||
|
||||
$loader->load('adapter_factories.xml');
|
||||
|
||||
// load user-created adapter factories
|
||||
foreach ($config['factories'] as $factory) {
|
||||
$loader->load($parameterBag->resolveValue($factory));
|
||||
}
|
||||
|
||||
$services = $tempContainer->findTaggedServiceIds('gaufrette.adapter.factory');
|
||||
$factories = array();
|
||||
foreach (array_keys($services) as $id) {
|
||||
$factory = $tempContainer->get($id);
|
||||
$factories[str_replace('-', '_', $factory->getKey())] = $factory;
|
||||
}
|
||||
|
||||
return $this->factories = $factories;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user