BeSimpleSoap/DependencyInjection/WebServiceExtension.php

81 lines
2.6 KiB
PHP
Raw Normal View History

2010-10-04 20:27:00 +02:00
<?php
/*
* This file is part of the WebServiceBundle.
*
* (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 Bundle\WebServiceBundle\DependencyInjection;
2011-02-03 01:04:12 +01:00
use Bundle\WebServiceBundle\Util\Assert;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\Config\Definition\Processor;
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;
2010-10-04 20:27:00 +02:00
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
/**
* WebServiceExtension.
*
* @author Christian Kerl <christian-kerl@web.de>
*/
2010-10-04 20:27:00 +02:00
class WebServiceExtension extends Extension
{
// maps config options to service suffix'
private $bindingConfigToServiceSuffixMap = array('rpc-literal' => '.rpcliteral', 'document-wrapped' => '.documentwrapped');
public function load(array $configs, ContainerBuilder $container)
{
$loader = new XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('annotations.xml');
$loader->load('webservice.xml');
$processor = new Processor();
$configuration = new Configuration();
$config = $processor->process($configuration->getConfigTree(), $configs);
foreach($config['services'] as $serviceContextConfig)
{
$this->createWebServiceContext($serviceContextConfig, $container);
}
}
private function createWebServiceContext(array $config, ContainerBuilder $container)
2010-10-04 20:27:00 +02:00
{
$bindingDependendArguments = array(1, 3, 4);
$bindingSuffix = $this->bindingConfigToServiceSuffixMap[$config['binding']];
unset($config['binding']);
$contextPrototype = $container->getDefinition('webservice.context');
$contextPrototypeArguments = $contextPrototype->getArguments();
$contextId = 'webservice.context.' . $config['name'];
$context = $container->setDefinition($contextId, new DefinitionDecorator('webservice.context'));
foreach($bindingDependendArguments as $idx)
{
$context->setArgument($idx, new Reference($contextPrototypeArguments[$idx] . $bindingSuffix));
}
$context->setArgument(5, array_merge($contextPrototypeArguments[5], $config));
2010-10-04 20:27:00 +02:00
}
2010-10-04 20:27:00 +02:00
public function getNamespace()
{
return null;
}
public function getXsdValidationBasePath()
2010-10-04 20:27:00 +02:00
{
return null;
2010-10-04 20:27:00 +02:00
}
}