BeSimpleSoap/DependencyInjection/BeSimpleSoapExtension.php

68 lines
2.2 KiB
PHP
Raw Normal View History

2010-10-04 20:27:00 +02:00
<?php
/*
* This file is part of the BeSimpleSoapBundle.
*
* (c) Christian Kerl <christian-kerl@web.de>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
2010-10-04 20:27:00 +02:00
namespace BeSimple\SoapBundle\DependencyInjection;
2010-10-04 20:27:00 +02:00
use Symfony\Component\Config\Definition\Processor;
use Symfony\Component\Config\FileLocator;
2010-10-04 20:27:00 +02:00
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;
/**
* BeSimpleSoapExtension.
*
* @author Christian Kerl <christian-kerl@web.de>
*/
class BeSimpleSoapExtension extends Extension
2010-10-04 20:27:00 +02:00
{
// maps config options to service suffix
private $bindingConfigToServiceSuffixMap = array(
'rpc-literal' => 'rpcliteral',
'document-wrapped' => 'documentwrapped',
);
2011-07-14 17:45:03 +02:00
public function load(array $configs, ContainerBuilder $container)
{
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('loaders.xml');
$loader->load('webservice.xml');
2011-07-14 17:45:03 +02:00
$processor = new Processor();
$configuration = new Configuration();
$config = $processor->process($configuration->getConfigTree(), $configs);
2011-07-14 17:45:03 +02:00
foreach($config['services'] as $name => $serviceConfig) {
$serviceConfig['name'] = $name;
$this->createWebServiceContext($serviceConfig, $container);
}
}
private function createWebServiceContext(array $config, ContainerBuilder $container)
2010-10-04 20:27:00 +02:00
{
$bindingSuffix = $this->bindingConfigToServiceSuffixMap[$config['binding']];
unset($config['binding']);
2011-07-14 17:45:03 +02:00
$contextId = 'besimple.soap.context.'.$config['name'];
$definition = new DefinitionDecorator('besimple.soap.context.'.$bindingSuffix);
$context = $container->setDefinition($contextId, $definition);
2011-07-14 17:45:03 +02:00
$options = $container
->getDefinition('besimple.soap.context.'.$bindingSuffix)
->getArgument(4);
$definition->replaceArgument(4, array_merge($options, $config));
2010-10-04 20:27:00 +02:00
}
}