moved DI extensions classes to their own sub-namespace
This commit is contained in:
parent
47fd5e848b
commit
2a051b5039
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Bundle\DoctrineBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Definition;
|
||||
@ -24,7 +24,7 @@ use Symfony\Components\DependencyInjection\Reference;
|
||||
* @subpackage Bundle_DoctrineBundle
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class DoctrineExtension extends LoaderExtension
|
||||
class DoctrineExtension extends Extension
|
||||
{
|
||||
protected $resources;
|
||||
protected $alias;
|
||||
@ -59,8 +59,8 @@ class DoctrineExtension extends LoaderExtension
|
||||
public function dbalLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('doctrine.dbal.logger')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['dbal']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['dbal']);
|
||||
}
|
||||
|
||||
$defaultConnection = array(
|
||||
@ -142,8 +142,8 @@ class DoctrineExtension extends LoaderExtension
|
||||
*/
|
||||
public function ormLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['orm']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['orm']);
|
||||
|
||||
if (isset($config['default_entity_manager'])) {
|
||||
$container->getParameter('doctrine.orm.default_entity_manager', $config['default_entity_manager']);
|
||||
|
@ -4,6 +4,7 @@ namespace Symfony\Bundle\DoctrineBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
use Symfony\Components\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Loader\Loader;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Bundle\DoctrineBundle\DependencyInjection\DoctrineExtension;
|
||||
@ -36,7 +37,7 @@ class DoctrineBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new DoctrineExtension($parameterBag->get('kernel.bundle_dirs'), $parameterBag->get('kernel.bundles')));
|
||||
ContainerBuilder::registerExtension(new DoctrineExtension($parameterBag->get('kernel.bundle_dirs'), $parameterBag->get('kernel.bundles')));
|
||||
|
||||
$metadataDirs = array();
|
||||
$entityDirs = array();
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Bundle\DoctrineMongoDBBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Reference;
|
||||
@ -18,7 +18,7 @@ use Symfony\Components\DependencyInjection\Resource\FileResource;
|
||||
*
|
||||
* @todo Add support for multiple document managers
|
||||
*/
|
||||
class MongoDBExtension extends LoaderExtension
|
||||
class MongoDBExtension extends Extension
|
||||
{
|
||||
protected $bundles;
|
||||
protected $resources = array(
|
||||
@ -38,8 +38,8 @@ class MongoDBExtension extends LoaderExtension
|
||||
*/
|
||||
public function mongodbLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['mongodb']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['mongodb']);
|
||||
|
||||
if (!$container->hasDefinition('doctrine.odm.mongodb.document_manager')) {
|
||||
|
||||
|
@ -25,6 +25,6 @@ class DoctrineMongoDBBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new MongoDBExtension($parameterBag->get('kernel.bundles')));
|
||||
ContainerBuilder::registerExtension(new MongoDBExtension($parameterBag->get('kernel.bundles')));
|
||||
}
|
||||
}
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Bundle\FrameworkBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\Resource\FileResource;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
@ -25,7 +25,7 @@ use Symfony\Components\DependencyInjection\Definition;
|
||||
* @subpackage Bundle_FrameworkBundle
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class WebExtension extends LoaderExtension
|
||||
class WebExtension extends Extension
|
||||
{
|
||||
protected $resources = array(
|
||||
'templating' => 'templating.xml',
|
||||
@ -53,8 +53,8 @@ class WebExtension extends LoaderExtension
|
||||
public function configLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('controller_manager')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['web']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['web']);
|
||||
}
|
||||
|
||||
if (isset($config['ide']) && 'textmate' === $config['ide']) {
|
||||
@ -68,9 +68,9 @@ class WebExtension extends LoaderExtension
|
||||
if (isset($config['profiler'])) {
|
||||
if ($config['profiler']) {
|
||||
if (!$container->hasDefinition('profiler')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load('profiling.xml'));
|
||||
$container->merge($loader->load('collectors.xml'));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load('profiling.xml');
|
||||
$loader->load('collectors.xml');
|
||||
}
|
||||
} elseif ($container->hasDefinition('profiler')) {
|
||||
$container->getDefinition('profiling')->clearAnnotations();
|
||||
@ -81,8 +81,8 @@ class WebExtension extends LoaderExtension
|
||||
if (isset($config['toolbar'])) {
|
||||
if ($config['toolbar']) {
|
||||
if (!$container->hasDefinition('debug.toolbar')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load('toolbar.xml'));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load('toolbar.xml');
|
||||
}
|
||||
} elseif ($container->hasDefinition('debug.toolbar')) {
|
||||
$container->getDefinition('debug.toolbar')->clearAnnotations();
|
||||
@ -92,8 +92,8 @@ class WebExtension extends LoaderExtension
|
||||
if (isset($config['validation']['enabled'])) {
|
||||
if ($config['validation']['enabled']) {
|
||||
if (!$container->hasDefinition('validator')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['validation']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['validation']);
|
||||
}
|
||||
|
||||
$xmlMappingFiles = array();
|
||||
@ -175,8 +175,8 @@ class WebExtension extends LoaderExtension
|
||||
public function templatingLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('templating')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['templating']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['templating']);
|
||||
}
|
||||
|
||||
if (array_key_exists('escaping', $config)) {
|
||||
|
@ -36,7 +36,7 @@ class FrameworkBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new WebExtension($parameterBag->get('kernel.bundle_dirs'), $parameterBag->get('kernel.bundles')));
|
||||
ContainerBuilder::registerExtension(new WebExtension($parameterBag->get('kernel.bundle_dirs'), $parameterBag->get('kernel.bundles')));
|
||||
|
||||
$dirs = array('%kernel.root_dir%/views/%%bundle%%/%%controller%%/%%name%%%%format%%.%%renderer%%');
|
||||
foreach ($parameterBag->get('kernel.bundle_dirs') as $dir) {
|
||||
@ -46,8 +46,8 @@ class FrameworkBundle extends Bundle
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
if ($parameterBag->get('kernel.debug')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/Resources/config');
|
||||
$container->merge($loader->load('debug.xml'));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/Resources/config');
|
||||
$loader->load('debug.xml');
|
||||
}
|
||||
|
||||
return $container;
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
namespace Symfony\Bundle\PropelBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Definition;
|
||||
use Symfony\Components\DependencyInjection\Reference;
|
||||
|
||||
class PropelExtension extends LoaderExtension
|
||||
class PropelExtension extends Extension
|
||||
{
|
||||
protected $resources = array(
|
||||
'propel' => 'propel.xml',
|
||||
@ -23,8 +23,8 @@ class PropelExtension extends LoaderExtension
|
||||
public function configLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('propel')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['propel']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['propel']);
|
||||
}
|
||||
|
||||
if (!$container->hasParameter('propel.path')) {
|
||||
@ -53,8 +53,8 @@ class PropelExtension extends LoaderExtension
|
||||
public function dbalLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('propel')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['propel']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['propel']);
|
||||
}
|
||||
|
||||
$defaultConnection = array(
|
||||
|
@ -20,7 +20,7 @@ class PropelBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new PropelExtension());
|
||||
ContainerBuilder::registerExtension(new PropelExtension());
|
||||
}
|
||||
|
||||
public function boot(ContainerInterface $container)
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Bundle\SwiftmailerBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Reference;
|
||||
@ -23,7 +23,7 @@ use Symfony\Components\DependencyInjection\Reference;
|
||||
* @subpackage Bundle_SwiftmailerBundle
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class SwiftMailerExtension extends LoaderExtension
|
||||
class SwiftMailerExtension extends Extension
|
||||
{
|
||||
protected $resources = array(
|
||||
'mailer' => 'swiftmailer.xml',
|
||||
@ -46,8 +46,8 @@ class SwiftMailerExtension extends LoaderExtension
|
||||
public function mailerLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('swiftmailer.mailer')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['mailer']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['mailer']);
|
||||
$container->setAlias('mailer', 'swiftmailer.mailer');
|
||||
}
|
||||
|
||||
|
@ -4,6 +4,7 @@ namespace Symfony\Bundle\SwiftmailerBundle;
|
||||
|
||||
use Symfony\Framework\Bundle\Bundle;
|
||||
use Symfony\Components\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Loader\Loader;
|
||||
use Symfony\Bundle\SwiftmailerBundle\DependencyInjection\SwiftmailerExtension;
|
||||
|
||||
@ -34,6 +35,6 @@ class SwiftmailerBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new SwiftmailerExtension());
|
||||
ContainerBuilder::registerExtension(new SwiftmailerExtension());
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Bundle\TwigBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
@ -22,7 +22,7 @@ use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
* @subpackage Bundle_TwigBundle
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class TwigExtension extends LoaderExtension
|
||||
class TwigExtension extends Extension
|
||||
{
|
||||
/**
|
||||
* Loads the Twig configuration.
|
||||
@ -33,8 +33,8 @@ class TwigExtension extends LoaderExtension
|
||||
public function configLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('twig')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load('twig.xml'));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load('twig.xml');
|
||||
}
|
||||
|
||||
$container->setParameter('twig.options', array_replace($container->getParameter('twig.options'), $config));
|
||||
|
@ -36,6 +36,6 @@ class TwigBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new TwigExtension());
|
||||
ContainerBuilder::registerExtension(new TwigExtension());
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Bundle\ZendBundle\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
@ -22,7 +22,7 @@ use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
* @subpackage Bundle_ZendBundle
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
class ZendExtension extends LoaderExtension
|
||||
class ZendExtension extends Extension
|
||||
{
|
||||
protected $resources = array(
|
||||
'logger' => 'logger.xml',
|
||||
@ -41,8 +41,8 @@ class ZendExtension extends LoaderExtension
|
||||
public function loggerLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('zend.logger')) {
|
||||
$loader = new XmlFileLoader(__DIR__.'/../Resources/config');
|
||||
$container->merge($loader->load($this->resources['logger']));
|
||||
$loader = new XmlFileLoader($container, __DIR__.'/../Resources/config');
|
||||
$loader->load($this->resources['logger']);
|
||||
$container->setAlias('logger', 'zend.logger');
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,7 @@ use Symfony\Framework\Bundle\Bundle;
|
||||
use Symfony\Components\DependencyInjection\ParameterBag\ParameterBagInterface;
|
||||
use Symfony\Components\DependencyInjection\Reference;
|
||||
use Symfony\Components\DependencyInjection\Loader\Loader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Bundle\ZendBundle\DependencyInjection\ZendExtension;
|
||||
|
||||
/*
|
||||
@ -35,6 +36,6 @@ class ZendBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new ZendExtension());
|
||||
ContainerBuilder::registerExtension(new ZendExtension());
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Components\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtensionInterface;
|
||||
use Symfony\Components\DependencyInjection\Extension\ExtensionInterface;
|
||||
use Symfony\Components\DependencyInjection\Resource\ResourceInterface;
|
||||
use Symfony\Components\DependencyInjection\Resource\FileResource;
|
||||
|
||||
@ -24,11 +24,44 @@ use Symfony\Components\DependencyInjection\Resource\FileResource;
|
||||
*/
|
||||
class ContainerBuilder extends Container implements AnnotatedContainerInterface
|
||||
{
|
||||
protected $definitions = array();
|
||||
protected $aliases = array();
|
||||
protected $loading = array();
|
||||
protected $resources = array();
|
||||
protected $extensions = array();
|
||||
static protected $extensions = array();
|
||||
|
||||
protected $definitions = array();
|
||||
protected $aliases = array();
|
||||
protected $loading = array();
|
||||
protected $resources = array();
|
||||
protected $extensionContainers = array();
|
||||
|
||||
/**
|
||||
* Registers an extension.
|
||||
*
|
||||
* @param ExtensionInterface $extension An extension instance
|
||||
*/
|
||||
static public function registerExtension(ExtensionInterface $extension)
|
||||
{
|
||||
static::$extensions[$extension->getAlias()] = static::$extensions[$extension->getNamespace()] = $extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an extension by alias or namespace.
|
||||
*
|
||||
* @param string $name An alias or a namespace
|
||||
*
|
||||
* @return ExtensionInterface An extension instance
|
||||
*/
|
||||
static public function getExtension($name)
|
||||
{
|
||||
if (!isset(static::$extensions[$name])) {
|
||||
throw new \LogicException(sprintf('Container extension "%s" is not registered', $name));
|
||||
}
|
||||
|
||||
return static::$extensions[$name];
|
||||
}
|
||||
|
||||
static public function hasExtension($name)
|
||||
{
|
||||
return isset(static::$extensions[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an array of resources loaded to build this configuration.
|
||||
@ -71,13 +104,13 @@ class ContainerBuilder extends Container implements AnnotatedContainerInterface
|
||||
/**
|
||||
* Loads the configuration for an extension.
|
||||
*
|
||||
* @param LoaderExtensionInterface $extension A LoaderExtensionInterface instance
|
||||
* @param ExtensionInterface $extension A ExtensionInterface instance
|
||||
* @param string $tag The extension tag to load (without the namespace - namespace.tag)
|
||||
* @param array $values An array of values that customizes the extension
|
||||
*
|
||||
* @return ContainerBuilder The current instance
|
||||
*/
|
||||
public function loadFromExtension(LoaderExtensionInterface $extension, $tag, array $values = array())
|
||||
public function loadFromExtension(ExtensionInterface $extension, $tag, array $values = array())
|
||||
{
|
||||
if (true === $this->isFrozen()) {
|
||||
throw new \LogicException('Cannot load from an extension on a frozen container.');
|
||||
@ -87,14 +120,14 @@ class ContainerBuilder extends Container implements AnnotatedContainerInterface
|
||||
|
||||
$this->addObjectResource($extension);
|
||||
|
||||
if (!isset($this->extensions[$namespace])) {
|
||||
$this->extensions[$namespace] = new self($this->parameterBag);
|
||||
if (!isset($this->extensionContainers[$namespace])) {
|
||||
$this->extensionContainers[$namespace] = new self($this->parameterBag);
|
||||
|
||||
$r = new \ReflectionObject($extension);
|
||||
$this->extensions[$namespace]->addResource(new FileResource($r->getFileName()));
|
||||
$this->extensionContainers[$namespace]->addResource(new FileResource($r->getFileName()));
|
||||
}
|
||||
|
||||
$extension->load($tag, $values, $this->extensions[$namespace]);
|
||||
$extension->load($tag, $values, $this->extensionContainers[$namespace]);
|
||||
|
||||
return $this;
|
||||
}
|
||||
@ -204,10 +237,10 @@ class ContainerBuilder extends Container implements AnnotatedContainerInterface
|
||||
}
|
||||
|
||||
foreach ($container->getExtensionContainers() as $name => $container) {
|
||||
if (isset($this->extensions[$name])) {
|
||||
$this->extensions[$name]->merge($container);
|
||||
if (isset($this->extensionContainers[$name])) {
|
||||
$this->extensionContainers[$name]->merge($container);
|
||||
} else {
|
||||
$this->extensions[$name] = $container;
|
||||
$this->extensionContainers[$name] = $container;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -215,11 +248,11 @@ class ContainerBuilder extends Container implements AnnotatedContainerInterface
|
||||
/**
|
||||
* Returns the containers for the registered extensions.
|
||||
*
|
||||
* @return LoaderExtensionInterface[] An array of extension containers
|
||||
* @return ExtensionInterface[] An array of extension containers
|
||||
*/
|
||||
public function getExtensionContainers()
|
||||
{
|
||||
return $this->extensions;
|
||||
return $this->extensionContainers;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -238,10 +271,10 @@ class ContainerBuilder extends Container implements AnnotatedContainerInterface
|
||||
$definitions = $this->definitions;
|
||||
$aliases = $this->aliases;
|
||||
|
||||
foreach ($this->extensions as $container) {
|
||||
foreach ($this->extensionContainers as $container) {
|
||||
$this->merge($container);
|
||||
}
|
||||
$this->extensions = array();
|
||||
$this->extensionContainers = array();
|
||||
|
||||
$this->addDefinitions($definitions);
|
||||
$this->addAliases($aliases);
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Components\DependencyInjection\Loader;
|
||||
namespace Symfony\Components\DependencyInjection\Extension;
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
@ -14,13 +14,13 @@ use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
*/
|
||||
|
||||
/**
|
||||
* LoaderExtension is a helper class that helps organize extensions better.
|
||||
* Extension is a helper class that helps organize extensions better.
|
||||
*
|
||||
* @package Symfony
|
||||
* @subpackage Components_DependencyInjection
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
abstract class LoaderExtension implements LoaderExtensionInterface
|
||||
abstract class Extension implements ExtensionInterface
|
||||
{
|
||||
/**
|
||||
* Loads a specific configuration.
|
@ -1,6 +1,6 @@
|
||||
<?php
|
||||
|
||||
namespace Symfony\Components\DependencyInjection\Loader;
|
||||
namespace Symfony\Components\DependencyInjection\Extension;
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
@ -14,13 +14,13 @@ use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
*/
|
||||
|
||||
/**
|
||||
* LoaderExtensionInterface is the interface implemented by loader extension classes.
|
||||
* ExtensionInterface is the interface implemented by container extension classes.
|
||||
*
|
||||
* @package Symfony
|
||||
* @subpackage Components_DependencyInjection
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*/
|
||||
interface LoaderExtensionInterface
|
||||
interface ExtensionInterface
|
||||
{
|
||||
/**
|
||||
* Loads a specific configuration.
|
@ -2,6 +2,8 @@
|
||||
|
||||
namespace Symfony\Components\DependencyInjection\Loader;
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony framework.
|
||||
*
|
||||
@ -25,10 +27,13 @@ abstract class FileLoader extends Loader
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
* @param string|array $paths A path or an array of paths where to look for resources
|
||||
*/
|
||||
public function __construct($paths = array())
|
||||
public function __construct(ContainerBuilder $container, $paths = array())
|
||||
{
|
||||
parent::__construct($container);
|
||||
|
||||
if (!is_array($paths)) {
|
||||
$paths = array($paths);
|
||||
}
|
||||
|
@ -27,21 +27,14 @@ class IniFileLoader extends FileLoader
|
||||
* Loads a resource.
|
||||
*
|
||||
* @param mixed $resource The resource
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance to use for the configuration
|
||||
*
|
||||
* @return ContainerBuilder A ContainerBuilder instance
|
||||
*
|
||||
* @throws \InvalidArgumentException When ini file is not valid
|
||||
*/
|
||||
public function load($file, ContainerBuilder $container = null)
|
||||
public function load($file)
|
||||
{
|
||||
$path = $this->findFile($file);
|
||||
|
||||
if (null === $container) {
|
||||
$container = new ContainerBuilder();
|
||||
}
|
||||
|
||||
$container->addResource(new FileResource($path));
|
||||
$this->container->addResource(new FileResource($path));
|
||||
|
||||
$result = parse_ini_file($path, true);
|
||||
if (false === $result || array() === $result) {
|
||||
@ -50,10 +43,8 @@ class IniFileLoader extends FileLoader
|
||||
|
||||
if (isset($result['parameters']) && is_array($result['parameters'])) {
|
||||
foreach ($result['parameters'] as $key => $value) {
|
||||
$container->setParameter($key, $value);
|
||||
$this->container->setParameter($key, $value);
|
||||
}
|
||||
}
|
||||
|
||||
return $container;
|
||||
}
|
||||
}
|
||||
|
@ -2,6 +2,8 @@
|
||||
|
||||
namespace Symfony\Components\DependencyInjection\Loader;
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony framework.
|
||||
*
|
||||
@ -20,27 +22,15 @@ namespace Symfony\Components\DependencyInjection\Loader;
|
||||
*/
|
||||
abstract class Loader implements LoaderInterface
|
||||
{
|
||||
static protected $extensions = array();
|
||||
protected $container;
|
||||
|
||||
/**
|
||||
* Registers an extension.
|
||||
* Constructor.
|
||||
*
|
||||
* @param LoaderExtensionInterface $extension An extension instance
|
||||
* @param \Symfony\Components\DependencyInjection\ContainerBuilder $container A ContainerBuilder instance
|
||||
*/
|
||||
static public function registerExtension(LoaderExtensionInterface $extension)
|
||||
public function __construct(ContainerBuilder $container)
|
||||
{
|
||||
static::$extensions[$extension->getAlias()] = static::$extensions[$extension->getNamespace()] = $extension;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns an extension by alias or namespace.
|
||||
*
|
||||
* @param string $name An alias or a namespace
|
||||
*
|
||||
* @return LoaderExtensionInterface An extension instance
|
||||
*/
|
||||
static public function getExtension($name)
|
||||
{
|
||||
return isset(static::$extensions[$name]) ? static::$extensions[$name] : null;
|
||||
$this->container = $container;
|
||||
}
|
||||
}
|
||||
|
@ -58,12 +58,7 @@ interface LoaderInterface
|
||||
* If you load file1.xml and file2.xml in this order, the value of complex
|
||||
* will be "foo".
|
||||
*
|
||||
* @param mixed $resource The resource
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance to use for the configuration
|
||||
*
|
||||
* @return ContainerBuilder A ContainerBuilder instance
|
||||
* @param mixed $resource The resource
|
||||
*/
|
||||
function load($resource, ContainerBuilder $container = null);
|
||||
|
||||
static function registerExtension(LoaderExtensionInterface $extension);
|
||||
function load($resource);
|
||||
}
|
||||
|
@ -29,62 +29,53 @@ class XmlFileLoader extends FileLoader
|
||||
/**
|
||||
* Loads an array of XML files.
|
||||
*
|
||||
* @param mixed $resource The resource
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance to use for the configuration
|
||||
*
|
||||
* @return ContainerBuilder A ContainerBuilder instance
|
||||
* @param mixed $resource The resource
|
||||
*/
|
||||
public function load($file, ContainerBuilder $container = null)
|
||||
public function load($file)
|
||||
{
|
||||
$path = $this->findFile($file);
|
||||
|
||||
$xml = $this->parseFile($path);
|
||||
|
||||
if (null === $container) {
|
||||
$container = new ContainerBuilder();
|
||||
}
|
||||
|
||||
$container->addResource(new FileResource($path));
|
||||
$this->container->addResource(new FileResource($path));
|
||||
|
||||
// anonymous services
|
||||
$xml = $this->processAnonymousServices($container, $xml, $file);
|
||||
$xml = $this->processAnonymousServices($xml, $file);
|
||||
|
||||
// imports
|
||||
$this->parseImports($container, $xml, $file);
|
||||
$this->parseImports($xml, $file);
|
||||
|
||||
// extensions
|
||||
$this->loadFromExtensions($container, $xml);
|
||||
$this->loadFromExtensions($xml);
|
||||
|
||||
// parameters
|
||||
$this->parseParameters($container, $xml, $file);
|
||||
$this->parseParameters($xml, $file);
|
||||
|
||||
// services
|
||||
$this->parseDefinitions($container, $xml, $file);
|
||||
|
||||
return $container;
|
||||
$this->parseDefinitions($xml, $file);
|
||||
}
|
||||
|
||||
protected function parseParameters(ContainerBuilder $container, $xml, $file)
|
||||
protected function parseParameters($xml, $file)
|
||||
{
|
||||
if (!$xml->parameters) {
|
||||
return;
|
||||
}
|
||||
|
||||
$container->getParameterBag()->add($xml->parameters->getArgumentsAsPhp('parameter'));
|
||||
$this->container->getParameterBag()->add($xml->parameters->getArgumentsAsPhp('parameter'));
|
||||
}
|
||||
|
||||
protected function parseImports(ContainerBuilder $container, $xml, $file)
|
||||
protected function parseImports($xml, $file)
|
||||
{
|
||||
if (!$xml->imports) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($xml->imports->import as $import) {
|
||||
$this->parseImport($container, $import, $file);
|
||||
$this->parseImport($import, $file);
|
||||
}
|
||||
}
|
||||
|
||||
protected function parseImport(ContainerBuilder $container, $import, $file)
|
||||
protected function parseImport($import, $file)
|
||||
{
|
||||
$class = null;
|
||||
if (isset($import['class']) && $import['class'] !== get_class($this)) {
|
||||
@ -101,28 +92,28 @@ class XmlFileLoader extends FileLoader
|
||||
}
|
||||
}
|
||||
|
||||
$loader = null === $class ? $this : new $class($this->paths);
|
||||
$loader = null === $class ? $this : new $class($this->container, $this->paths);
|
||||
|
||||
$importedFile = $this->getAbsolutePath((string) $import['resource'], dirname($file));
|
||||
|
||||
return $loader->load($importedFile, $container);
|
||||
$loader->load($importedFile);
|
||||
}
|
||||
|
||||
protected function parseDefinitions(ContainerBuilder $container, $xml, $file)
|
||||
protected function parseDefinitions($xml, $file)
|
||||
{
|
||||
if (!$xml->services) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($xml->services->service as $service) {
|
||||
$this->parseDefinition($container, (string) $service['id'], $service, $file);
|
||||
$this->parseDefinition((string) $service['id'], $service, $file);
|
||||
}
|
||||
}
|
||||
|
||||
protected function parseDefinition(ContainerBuilder $container, $id, $service, $file)
|
||||
protected function parseDefinition($id, $service, $file)
|
||||
{
|
||||
if ((string) $service['alias']) {
|
||||
$container->setAlias($id, (string) $service['alias']);
|
||||
$this->container->setAlias($id, (string) $service['alias']);
|
||||
|
||||
return;
|
||||
}
|
||||
@ -173,7 +164,7 @@ class XmlFileLoader extends FileLoader
|
||||
$definition->addAnnotation((string) $annotation['name'], $parameters);
|
||||
}
|
||||
|
||||
$container->setDefinition($id, $definition);
|
||||
$this->container->setDefinition($id, $definition);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -194,7 +185,7 @@ class XmlFileLoader extends FileLoader
|
||||
return simplexml_import_dom($dom, 'Symfony\\Components\\DependencyInjection\\SimpleXMLElement');
|
||||
}
|
||||
|
||||
protected function processAnonymousServices(ContainerBuilder $container, $xml, $file)
|
||||
protected function processAnonymousServices($xml, $file)
|
||||
{
|
||||
$definitions = array();
|
||||
$count = 0;
|
||||
@ -213,7 +204,7 @@ class XmlFileLoader extends FileLoader
|
||||
// resolve definitions
|
||||
krsort($definitions);
|
||||
foreach ($definitions as $id => $def) {
|
||||
$this->parseDefinition($container, $id, $def[0], $def[1]);
|
||||
$this->parseDefinition($id, $def[0], $def[1]);
|
||||
|
||||
$oNode = dom_import_simplexml($def[0]);
|
||||
$oNode->parentNode->removeChild($oNode);
|
||||
@ -239,7 +230,11 @@ class XmlFileLoader extends FileLoader
|
||||
if ($element = $dom->documentElement->getAttributeNS('http://www.w3.org/2001/XMLSchema-instance', 'schemaLocation')) {
|
||||
$items = preg_split('/\s+/', $element);
|
||||
for ($i = 0, $nb = count($items); $i < $nb; $i += 2) {
|
||||
if (($extension = static::getExtension($items[$i])) && false !== $extension->getXsdValidationBasePath()) {
|
||||
if (!$this->container->hasExtension($items[$i])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (($extension = $this->container->getExtension($items[$i])) && false !== $extension->getXsdValidationBasePath()) {
|
||||
$path = str_replace($extension->getNamespace(), str_replace('\\', '/', $extension->getXsdValidationBasePath()).'/', $items[$i + 1]);
|
||||
|
||||
if (!file_exists($path)) {
|
||||
@ -291,7 +286,7 @@ EOF
|
||||
}
|
||||
|
||||
// can it be handled by an extension?
|
||||
if (!static::getExtension($node->namespaceURI)) {
|
||||
if (!$this->container->hasExtension($node->namespaceURI)) {
|
||||
throw new \InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in %s).', $node->tagName, $file));
|
||||
}
|
||||
}
|
||||
@ -316,7 +311,7 @@ EOF
|
||||
return $errors;
|
||||
}
|
||||
|
||||
protected function loadFromExtensions(ContainerBuilder $container, $xml)
|
||||
protected function loadFromExtensions($xml)
|
||||
{
|
||||
foreach (dom_import_simplexml($xml)->childNodes as $node) {
|
||||
if (!$node instanceof \DOMElement || $node->namespaceURI === 'http://www.symfony-project.org/schema/dic/services') {
|
||||
@ -328,7 +323,7 @@ EOF
|
||||
$values = array();
|
||||
}
|
||||
|
||||
$container->loadFromExtension($this->getExtension($node->namespaceURI), $node->localName, $values);
|
||||
$this->container->loadFromExtension($this->container->getExtension($node->namespaceURI), $node->localName, $values);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -32,58 +32,49 @@ class YamlFileLoader extends FileLoader
|
||||
/**
|
||||
* Loads an array of Yaml files.
|
||||
*
|
||||
* @param mixed $resource The resource
|
||||
* @param ContainerBuilder $container A ContainerBuilder instance to use for the configuration
|
||||
*
|
||||
* @return ContainerBuilder A ContainerBuilder instance
|
||||
* @param mixed $resource The resource
|
||||
*/
|
||||
public function load($file, ContainerBuilder $container = null)
|
||||
public function load($file)
|
||||
{
|
||||
$path = $this->findFile($file);
|
||||
|
||||
$content = $this->loadFile($path);
|
||||
|
||||
if (null === $container) {
|
||||
$container = new ContainerBuilder();
|
||||
}
|
||||
|
||||
$container->addResource(new FileResource($path));
|
||||
$this->container->addResource(new FileResource($path));
|
||||
|
||||
if (!$content) {
|
||||
return $container;
|
||||
return;
|
||||
}
|
||||
|
||||
// imports
|
||||
$this->parseImports($container, $content, $file);
|
||||
$this->parseImports($content, $file);
|
||||
|
||||
// extensions
|
||||
$this->loadFromExtensions($container, $content);
|
||||
$this->loadFromExtensions($content);
|
||||
|
||||
// parameters
|
||||
if (isset($content['parameters'])) {
|
||||
foreach ($content['parameters'] as $key => $value) {
|
||||
$container->setParameter($key, $this->resolveServices($value));
|
||||
$this->container->setParameter($key, $this->resolveServices($value));
|
||||
}
|
||||
}
|
||||
|
||||
// services
|
||||
$this->parseDefinitions($container, $content, $file);
|
||||
|
||||
return $container;
|
||||
$this->parseDefinitions($content, $file);
|
||||
}
|
||||
|
||||
protected function parseImports(ContainerBuilder $container, $content, $file)
|
||||
protected function parseImports($content, $file)
|
||||
{
|
||||
if (!isset($content['imports'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($content['imports'] as $import) {
|
||||
$this->parseImport($container, $import, $file);
|
||||
$this->parseImport($import, $file);
|
||||
}
|
||||
}
|
||||
|
||||
protected function parseImport(ContainerBuilder $container, $import, $file)
|
||||
protected function parseImport($import, $file)
|
||||
{
|
||||
$class = null;
|
||||
if (isset($import['class']) && $import['class'] !== get_class($this)) {
|
||||
@ -100,28 +91,28 @@ class YamlFileLoader extends FileLoader
|
||||
}
|
||||
}
|
||||
|
||||
$loader = null === $class ? $this : new $class($this->paths);
|
||||
$loader = null === $class ? $this : new $class($this->container, $this->paths);
|
||||
|
||||
$importedFile = $this->getAbsolutePath($import['resource'], dirname($file));
|
||||
|
||||
return $loader->load($importedFile, $container);
|
||||
$loader->load($importedFile);
|
||||
}
|
||||
|
||||
protected function parseDefinitions(ContainerBuilder $container, $content, $file)
|
||||
protected function parseDefinitions($content, $file)
|
||||
{
|
||||
if (!isset($content['services'])) {
|
||||
return;
|
||||
}
|
||||
|
||||
foreach ($content['services'] as $id => $service) {
|
||||
$this->parseDefinition($container, $id, $service, $file);
|
||||
$this->parseDefinition($id, $service, $file);
|
||||
}
|
||||
}
|
||||
|
||||
protected function parseDefinition(ContainerBuilder $container, $id, $service, $file)
|
||||
protected function parseDefinition($id, $service, $file)
|
||||
{
|
||||
if (is_string($service) && 0 === strpos($service, '@')) {
|
||||
$container->setAlias($id, substr($service, 1));
|
||||
$this->container->setAlias($id, substr($service, 1));
|
||||
|
||||
return;
|
||||
}
|
||||
@ -175,7 +166,7 @@ class YamlFileLoader extends FileLoader
|
||||
}
|
||||
}
|
||||
|
||||
$container->setDefinition($id, $definition);
|
||||
$this->container->setDefinition($id, $definition);
|
||||
}
|
||||
|
||||
protected function loadFile($file)
|
||||
@ -204,7 +195,7 @@ class YamlFileLoader extends FileLoader
|
||||
// can it be handled by an extension?
|
||||
if (false !== strpos($key, '.')) {
|
||||
list($namespace, $tag) = explode('.', $key);
|
||||
if (!static::getExtension($namespace)) {
|
||||
if (!$this->container->hasExtension($namespace)) {
|
||||
throw new \InvalidArgumentException(sprintf('There is no extension able to load the configuration for "%s" (in %s).', $key, $file));
|
||||
}
|
||||
|
||||
@ -230,7 +221,7 @@ class YamlFileLoader extends FileLoader
|
||||
return $value;
|
||||
}
|
||||
|
||||
protected function loadFromExtensions(ContainerBuilder $container, $content)
|
||||
protected function loadFromExtensions($content)
|
||||
{
|
||||
foreach ($content as $key => $values) {
|
||||
if (in_array($key, array('imports', 'parameters', 'services'))) {
|
||||
@ -243,7 +234,7 @@ class YamlFileLoader extends FileLoader
|
||||
$values = array();
|
||||
}
|
||||
|
||||
$container->loadFromExtension($this->getExtension($namespace), $tag, $values);
|
||||
$this->container->loadFromExtension($this->container->getExtension($namespace), $tag, $values);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
namespace Symfony\Framework\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
@ -22,12 +22,12 @@ use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
* @subpackage Framework
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.org>
|
||||
*/
|
||||
class KernelExtension extends LoaderExtension
|
||||
class KernelExtension extends Extension
|
||||
{
|
||||
public function testLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
$loader = new XmlFileLoader(array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$container->merge($loader->load('test.xml'));
|
||||
$loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$loader->load('test.xml');
|
||||
$container->setParameter('kernel.include_core_classes', false);
|
||||
|
||||
return $container;
|
||||
@ -44,8 +44,8 @@ class KernelExtension extends LoaderExtension
|
||||
public function sessionLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$container->hasDefinition('session')) {
|
||||
$loader = new XmlFileLoader(array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$container->merge($loader->load('session.xml'));
|
||||
$loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$loader->load('session.xml');
|
||||
}
|
||||
|
||||
if (isset($config['default_locale'])) {
|
||||
|
@ -350,7 +350,6 @@ abstract class Kernel implements HttpKernelInterface, \Serializable
|
||||
}
|
||||
}
|
||||
$container->merge($this->registerContainerConfiguration());
|
||||
$container->commit();
|
||||
$container->freeze();
|
||||
|
||||
foreach (array('cache', 'logs') as $name) {
|
||||
|
@ -38,15 +38,15 @@ class KernelBundle extends Bundle
|
||||
*/
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new KernelExtension());
|
||||
ContainerBuilder::registerExtension(new KernelExtension());
|
||||
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
$loader = new XmlFileLoader(array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$container->merge($loader->load('services.xml'));
|
||||
$loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$loader->load('services.xml');
|
||||
|
||||
if ($parameterBag->get('kernel.debug')) {
|
||||
$container->merge($loader->load('debug.xml'));
|
||||
$loader->load('debug.xml');
|
||||
$container->setDefinition('event_dispatcher', $container->findDefinition('debug.event_dispatcher'));
|
||||
}
|
||||
|
||||
|
@ -142,19 +142,19 @@ class KernelBundle extends Bundle
|
||||
|
||||
public function buildContainer(ParameterBagInterface $parameterBag)
|
||||
{
|
||||
Loader::registerExtension(new KernelExtension());
|
||||
ContainerBuilder::registerExtension(new KernelExtension());
|
||||
|
||||
$configuration = new ContainerBuilder();
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
$loader = new XmlFileLoader(array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$configuration->merge($loader->load('services.xml'));
|
||||
$loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$loader->load('services.xml');
|
||||
|
||||
if ($parameterBag->get('kernel.debug')) {
|
||||
$configuration->merge($loader->load('debug.xml'));
|
||||
$configuration->setDefinition('event_dispatcher', $configuration->findDefinition('debug.event_dispatcher'));
|
||||
$loader->load('debug.xml');
|
||||
$container->setDefinition('event_dispatcher', $container->findDefinition('debug.event_dispatcher'));
|
||||
}
|
||||
|
||||
return $configuration;
|
||||
return $container;
|
||||
}
|
||||
|
||||
|
||||
@ -171,43 +171,43 @@ class KernelBundle extends Bundle
|
||||
|
||||
namespace Symfony\Framework\DependencyInjection;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
use Symfony\Components\DependencyInjection\Loader\XmlFileLoader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
|
||||
|
||||
|
||||
class KernelExtension extends LoaderExtension
|
||||
class KernelExtension extends Extension
|
||||
{
|
||||
public function testLoad($config, ContainerBuilder $configuration)
|
||||
public function testLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
$loader = new XmlFileLoader(array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$configuration->merge($loader->load('test.xml'));
|
||||
$configuration->setParameter('kernel.include_core_classes', false);
|
||||
$loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$loader->load('test.xml');
|
||||
$container->setParameter('kernel.include_core_classes', false);
|
||||
|
||||
return $configuration;
|
||||
return $container;
|
||||
}
|
||||
|
||||
|
||||
public function sessionLoad($config, ContainerBuilder $configuration)
|
||||
public function sessionLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (!$configuration->hasDefinition('session')) {
|
||||
$loader = new XmlFileLoader(array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$configuration->merge($loader->load('session.xml'));
|
||||
if (!$container->hasDefinition('session')) {
|
||||
$loader = new XmlFileLoader($container, array(__DIR__.'/../Resources/config', __DIR__.'/Resources/config'));
|
||||
$loader->load('session.xml');
|
||||
}
|
||||
|
||||
if (isset($config['default_locale'])) {
|
||||
$configuration->setParameter('session.default_locale', $config['default_locale']);
|
||||
$container->setParameter('session.default_locale', $config['default_locale']);
|
||||
}
|
||||
|
||||
if (isset($config['class'])) {
|
||||
$configuration->setParameter('session.class', $config['class']);
|
||||
$container->setParameter('session.class', $config['class']);
|
||||
}
|
||||
|
||||
foreach (array('name', 'auto_start', 'lifetime', 'path', 'domain', 'secure', 'httponly', 'cache_limiter', 'pdo.db_table') as $name) {
|
||||
if (isset($config['session'][$name])) {
|
||||
$configuration->setParameter('session.options.'.$name, $config['session'][$name]);
|
||||
$container->setParameter('session.options.'.$name, $config['session'][$name]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -217,16 +217,16 @@ class KernelExtension extends LoaderExtension
|
||||
$class = 'Symfony\\Framework\\FrameworkBundle\\SessionStorage\\'.$class.'SessionStorage';
|
||||
}
|
||||
|
||||
$configuration->setParameter('session.session', 'session.session.'.strtolower($class));
|
||||
$container->setParameter('session.session', 'session.session.'.strtolower($class));
|
||||
}
|
||||
|
||||
return $configuration;
|
||||
return $container;
|
||||
}
|
||||
|
||||
public function configLoad($config, ContainerBuilder $configuration)
|
||||
public function configLoad($config, ContainerBuilder $container)
|
||||
{
|
||||
if (isset($config['charset'])) {
|
||||
$configuration->setParameter('kernel.charset', $config['charset']);
|
||||
$container->setParameter('kernel.charset', $config['charset']);
|
||||
}
|
||||
|
||||
if (!array_key_exists('compilation', $config)) {
|
||||
@ -262,13 +262,13 @@ class KernelExtension extends LoaderExtension
|
||||
}
|
||||
}
|
||||
}
|
||||
$configuration->setParameter('kernel.compiled_classes', $classes);
|
||||
$container->setParameter('kernel.compiled_classes', $classes);
|
||||
|
||||
if (array_key_exists('error_handler_level', $config)) {
|
||||
$configuration->setParameter('error_handler.level', $config['error_handler_level']);
|
||||
$container->setParameter('error_handler.level', $config['error_handler_level']);
|
||||
}
|
||||
|
||||
return $configuration;
|
||||
return $container;
|
||||
}
|
||||
|
||||
|
||||
|
@ -384,4 +384,16 @@ class ContainerBuilderTest extends \PHPUnit_Framework_TestCase
|
||||
$container->addResource($b = new FileResource(__DIR__.'/Fixtures/xml/services2.xml'));
|
||||
$this->assertEquals(array($a, $b), $container->getResources(), '->getResources() returns an array of resources read for the current configuration');
|
||||
}
|
||||
|
||||
/**
|
||||
* @covers Symfony\Components\DependencyInjection\ContainerBuilder::registerExtension
|
||||
* @covers Symfony\Components\DependencyInjection\ContainerBuilder::getExtension
|
||||
*/
|
||||
public function testExtension()
|
||||
{
|
||||
$container = new ContainerBuilder();
|
||||
|
||||
$container->registerExtension($extension = new \ProjectExtension());
|
||||
$this->assertTrue($container->getExtension('project') === $extension, '->registerExtension() registers an extension');
|
||||
}
|
||||
}
|
||||
|
@ -34,15 +34,18 @@ class CrossCheckTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$tmp = tempnam('sf_service_container', 'sf');
|
||||
|
||||
$loader1 = new $loaderClass();
|
||||
file_put_contents($tmp, file_get_contents(self::$fixturesPath.'/'.$type.'/'.$fixture));
|
||||
$container1 = $loader1->load($tmp);
|
||||
|
||||
$container1 = new ContainerBuilder();
|
||||
$loader1 = new $loaderClass($container1);
|
||||
$loader1->load($tmp);
|
||||
|
||||
$dumper = new $dumperClass($container1);
|
||||
file_put_contents($tmp, $dumper->dump());
|
||||
|
||||
$loader2 = new $loaderClass();
|
||||
$container2 = $loader2->load($tmp);
|
||||
$container2 = new ContainerBuilder();
|
||||
$loader2 = new $loaderClass($container2);
|
||||
$loader2->load($tmp);
|
||||
|
||||
unlink($tmp);
|
||||
|
||||
@ -52,8 +55,6 @@ class CrossCheckTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
$this->assertEquals(serialize($container2), serialize($container1), 'loading a dump from a previously loaded container returns the same container');
|
||||
|
||||
$this->assertEquals($container2->getParameterBag()->all(), $container1->getParameterBag()->all(), '->getParameterBag() returns the same value for both containers');
|
||||
|
||||
$services1 = array();
|
||||
foreach ($container1 as $id => $service) {
|
||||
$services1[$id] = serialize($service);
|
||||
|
@ -8,16 +8,16 @@
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Tests\Components\DependencyInjection\Loader;
|
||||
namespace Symfony\Tests\Components\DependencyInjection\Extension;
|
||||
|
||||
require_once __DIR__.'/../Fixtures/includes/ProjectExtension.php';
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
class LoaderExtensionTest extends \PHPUnit_Framework_TestCase
|
||||
class ExtensionTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* @covers Symfony\Components\DependencyInjection\Loader\LoaderExtension::load
|
||||
* @covers Symfony\Components\DependencyInjection\Extension\Extension::load
|
||||
*/
|
||||
public function testLoad()
|
||||
{
|
@ -2,9 +2,9 @@
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Definition;
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
|
||||
class ProjectExtension extends LoaderExtension
|
||||
class ProjectExtension extends Extension
|
||||
{
|
||||
public function barLoad(array $config, ContainerBuilder $configuration)
|
||||
{
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Definition;
|
||||
use Symfony\Components\DependencyInjection\Loader\LoaderExtension;
|
||||
use Symfony\Components\DependencyInjection\Extension\Extension;
|
||||
|
||||
class ProjectWithXsdExtension extends ProjectExtension
|
||||
{
|
||||
|
@ -20,10 +20,10 @@ class FileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
*/
|
||||
public function testConstructor()
|
||||
{
|
||||
$loader = new ProjectLoader(__DIR__);
|
||||
$loader = new ProjectLoader(new ContainerBuilder(), __DIR__);
|
||||
$this->assertEquals(array(__DIR__), $loader->paths, '__construct() takes a path as its second argument');
|
||||
|
||||
$loader = new ProjectLoader(array(__DIR__, __DIR__));
|
||||
$loader = new ProjectLoader(new ContainerBuilder(), array(__DIR__, __DIR__));
|
||||
$this->assertEquals(array(__DIR__, __DIR__), $loader->paths, '__construct() takes an array of paths as its second argument');
|
||||
}
|
||||
|
||||
@ -32,7 +32,7 @@ class FileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
*/
|
||||
public function testGetAbsolutePath()
|
||||
{
|
||||
$loader = new ProjectLoader(array(__DIR__.'/../Fixtures/containers'));
|
||||
$loader = new ProjectLoader(new ContainerBuilder(), array(__DIR__.'/../Fixtures/containers'));
|
||||
$this->assertEquals('/foo.xml', $loader->getAbsolutePath('/foo.xml'), '->getAbsolutePath() return the path unmodified if it is already an absolute path');
|
||||
$this->assertEquals('c:\\\\foo.xml', $loader->getAbsolutePath('c:\\\\foo.xml'), '->getAbsolutePath() return the path unmodified if it is already an absolute path');
|
||||
$this->assertEquals('c:/foo.xml', $loader->getAbsolutePath('c:/foo.xml'), '->getAbsolutePath() return the path unmodified if it is already an absolute path');
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
namespace Symfony\Tests\Components\DependencyInjection\Loader;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Builder;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Loader\IniFileLoader;
|
||||
|
||||
class IniFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
@ -28,9 +28,10 @@ class IniFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
*/
|
||||
public function testLoader()
|
||||
{
|
||||
$loader = new IniFileLoader(self::$fixturesPath.'/ini');
|
||||
$config = $loader->load('parameters.ini');
|
||||
$this->assertEquals(array('foo' => 'bar', 'bar' => '%foo%'), $config->getParameterBag()->all(), '->load() takes a single file name as its first argument');
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new IniFileLoader($container, self::$fixturesPath.'/ini');
|
||||
$loader->load('parameters.ini');
|
||||
$this->assertEquals(array('foo' => 'bar', 'bar' => '%foo%'), $container->getParameterBag()->all(), '->load() takes a single file name as its first argument');
|
||||
|
||||
try {
|
||||
$loader->load('foo.ini');
|
||||
|
@ -1,32 +0,0 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
* (c) Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Tests\Components\DependencyInjection\Loader;
|
||||
|
||||
require_once __DIR__.'/../Fixtures/includes/ProjectExtension.php';
|
||||
|
||||
use Symfony\Components\DependencyInjection\Loader\Loader;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
|
||||
class ProjectLoader1 extends Loader
|
||||
{
|
||||
public function load($resource, ContainerBuilder $container = null)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
class LoaderTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testExtension()
|
||||
{
|
||||
ProjectLoader1::registerExtension($extension = new \ProjectExtension());
|
||||
$this->assertTrue(ProjectLoader1::getExtension('project') === $extension, '::registerExtension() registers an extension');
|
||||
}
|
||||
}
|
@ -10,7 +10,7 @@
|
||||
|
||||
namespace Symfony\Tests\Components\DependencyInjection\Loader;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Builder;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Reference;
|
||||
use Symfony\Components\DependencyInjection\Definition;
|
||||
use Symfony\Components\DependencyInjection\Loader\Loader;
|
||||
@ -29,7 +29,7 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testLoad()
|
||||
{
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/ini');
|
||||
$loader = new ProjectLoader2(new ContainerBuilder(), self::$fixturesPath.'/ini');
|
||||
|
||||
try {
|
||||
$loader->load('foo.xml');
|
||||
@ -42,7 +42,7 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testParseFile()
|
||||
{
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/ini');
|
||||
$loader = new ProjectLoader2(new ContainerBuilder(), self::$fixturesPath.'/ini');
|
||||
|
||||
try {
|
||||
$loader->parseFile(self::$fixturesPath.'/ini/parameters.ini');
|
||||
@ -52,7 +52,7 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertStringStartsWith('[ERROR 4] Start tag expected, \'<\' not found (in', $e->getMessage(), '->parseFile() throws an InvalidArgumentException if the loaded file is not a valid XML file');
|
||||
}
|
||||
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/xml');
|
||||
$loader = new ProjectLoader2(new ContainerBuilder(), self::$fixturesPath.'/xml');
|
||||
|
||||
try {
|
||||
$loader->parseFile(self::$fixturesPath.'/xml/nonvalid.xml');
|
||||
@ -68,10 +68,11 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testLoadParameters()
|
||||
{
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/xml');
|
||||
$config = $loader->load('services2.xml');
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new ProjectLoader2($container, self::$fixturesPath.'/xml');
|
||||
$loader->load('services2.xml');
|
||||
|
||||
$actual = $config->getParameterBag()->all();
|
||||
$actual = $container->getParameterBag()->all();
|
||||
$expected = array('a string', 'foo' => 'bar', 'values' => array(0, 'integer' => 4, 100 => null, 'true', true, false, 'on', 'off', 'float' => 1.3, 1000.3, 'a string', array('foo', 'bar')), 'foo_bar' => new Reference('foo_bar'));
|
||||
|
||||
$this->assertEquals($expected, $actual, '->load() converts XML values to PHP ones');
|
||||
@ -79,10 +80,11 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testLoadImports()
|
||||
{
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/xml');
|
||||
$config = $loader->load('services4.xml');
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new ProjectLoader2($container, self::$fixturesPath.'/xml');
|
||||
$loader->load('services4.xml');
|
||||
|
||||
$actual = $config->getParameterBag()->all();
|
||||
$actual = $container->getParameterBag()->all();
|
||||
$expected = array('a string', 'foo' => 'bar', 'values' => array(true, false), 'foo_bar' => new Reference('foo_bar'), 'bar' => '%foo%', 'imported_from_ini' => true, 'imported_from_yaml' => true);
|
||||
|
||||
$this->assertEquals(array_keys($expected), array_keys($actual), '->load() imports and merges imported files');
|
||||
@ -90,9 +92,10 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testLoadAnonymousServices()
|
||||
{
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/xml');
|
||||
$config = $loader->load('services5.xml');
|
||||
$services = $config->getDefinitions();
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new ProjectLoader2($container, self::$fixturesPath.'/xml');
|
||||
$loader->load('services5.xml');
|
||||
$services = $container->getDefinitions();
|
||||
$this->assertEquals(3, count($services), '->load() attributes unique ids to anonymous services');
|
||||
$args = $services['foo']->getArguments();
|
||||
$this->assertEquals(1, count($args), '->load() references anonymous services as "normal" ones');
|
||||
@ -111,9 +114,10 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testLoadServices()
|
||||
{
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/xml');
|
||||
$config = $loader->load('services6.xml');
|
||||
$services = $config->getDefinitions();
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new ProjectLoader2($container, self::$fixturesPath.'/xml');
|
||||
$loader->load('services6.xml');
|
||||
$services = $container->getDefinitions();
|
||||
$this->assertTrue(isset($services['foo']), '->load() parses <service> elements');
|
||||
$this->assertEquals('Symfony\\Components\\DependencyInjection\\Definition', get_class($services['foo']), '->load() converts <service> element to Definition instances');
|
||||
$this->assertEquals('FooClass', $services['foo']->getClass(), '->load() parses the class attribute');
|
||||
@ -129,7 +133,7 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array(array('setBar', array('foo', new Reference('foo'), array(true, false)))), $services['method_call2']->getMethodCalls(), '->load() parses the method_call tag');
|
||||
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
|
||||
|
||||
$aliases = $config->getAliases();
|
||||
$aliases = $container->getAliases();
|
||||
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses <service> elements');
|
||||
$this->assertEquals('foo', $aliases['alias_for_foo'], '->load() parses aliases');
|
||||
}
|
||||
@ -167,15 +171,16 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testExtensions()
|
||||
{
|
||||
Loader::registerExtension(new \ProjectExtension());
|
||||
Loader::registerExtension(new \ProjectWithXsdExtension());
|
||||
$loader = new ProjectLoader2(self::$fixturesPath.'/xml');
|
||||
$container = new ContainerBuilder();
|
||||
$container->registerExtension(new \ProjectExtension());
|
||||
$container->registerExtension(new \ProjectWithXsdExtension());
|
||||
$loader = new ProjectLoader2($container, self::$fixturesPath.'/xml');
|
||||
|
||||
// extension without an XSD
|
||||
$config = $loader->load('extensions/services1.xml');
|
||||
$config->freeze();
|
||||
$services = $config->getDefinitions();
|
||||
$parameters = $config->getParameterBag()->all();
|
||||
$loader->load('extensions/services1.xml');
|
||||
$container->freeze();
|
||||
$services = $container->getDefinitions();
|
||||
$parameters = $container->getParameterBag()->all();
|
||||
|
||||
$this->assertTrue(isset($services['project.service.bar']), '->load() parses extension elements');
|
||||
$this->assertTrue(isset($parameters['project.parameter.bar']), '->load() parses extension elements');
|
||||
@ -184,10 +189,14 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('BAR', $parameters['project.parameter.foo'], '->load() parses extension elements');
|
||||
|
||||
// extension with an XSD
|
||||
$config = $loader->load('extensions/services2.xml');
|
||||
$config->freeze();
|
||||
$services = $config->getDefinitions();
|
||||
$parameters = $config->getParameterBag()->all();
|
||||
$container = new ContainerBuilder();
|
||||
$container->registerExtension(new \ProjectExtension());
|
||||
$container->registerExtension(new \ProjectWithXsdExtension());
|
||||
$loader = new ProjectLoader2($container, self::$fixturesPath.'/xml');
|
||||
$loader->load('extensions/services2.xml');
|
||||
$container->freeze();
|
||||
$services = $container->getDefinitions();
|
||||
$parameters = $container->getParameterBag()->all();
|
||||
|
||||
$this->assertTrue(isset($services['project.service.bar']), '->load() parses extension elements');
|
||||
$this->assertTrue(isset($parameters['project.parameter.bar']), '->load() parses extension elements');
|
||||
@ -195,9 +204,11 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('BAR', $services['project.service.foo']->getClass(), '->load() parses extension elements');
|
||||
$this->assertEquals('BAR', $parameters['project.parameter.foo'], '->load() parses extension elements');
|
||||
|
||||
$loader = new ProjectLoader2(new ContainerBuilder(), self::$fixturesPath.'/xml');
|
||||
|
||||
// extension with an XSD (does not validate)
|
||||
try {
|
||||
$config = $loader->load('extensions/services3.xml');
|
||||
$loader->load('extensions/services3.xml');
|
||||
$this->fail('->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
|
||||
} catch (\Exception $e) {
|
||||
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the configuration does not validate the XSD');
|
||||
@ -206,7 +217,7 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
// non-registered extension
|
||||
try {
|
||||
$config = $loader->load('extensions/services4.xml');
|
||||
$loader->load('extensions/services4.xml');
|
||||
$this->fail('->load() throws an InvalidArgumentException if the tag is not valid');
|
||||
} catch (\Exception $e) {
|
||||
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the tag is not valid');
|
||||
@ -215,7 +226,7 @@ class XmlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
// non-existent tag for a known extension
|
||||
try {
|
||||
$config = $loader->load('extensions/services5.xml');
|
||||
$loader->load('extensions/services5.xml');
|
||||
$this->fail('->load() throws an InvalidArgumentException if a tag is not valid for a given extension');
|
||||
} catch (\Exception $e) {
|
||||
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if a tag is not valid for a given extension');
|
||||
|
@ -10,7 +10,7 @@
|
||||
|
||||
namespace Symfony\Tests\Components\DependencyInjection\Loader;
|
||||
|
||||
use Symfony\Components\DependencyInjection\Builder;
|
||||
use Symfony\Components\DependencyInjection\ContainerBuilder;
|
||||
use Symfony\Components\DependencyInjection\Reference;
|
||||
use Symfony\Components\DependencyInjection\Definition;
|
||||
use Symfony\Components\DependencyInjection\Loader\Loader;
|
||||
@ -28,7 +28,7 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testLoadFile()
|
||||
{
|
||||
$loader = new ProjectLoader3(self::$fixturesPath.'/ini');
|
||||
$loader = new ProjectLoader3(new ContainerBuilder(), self::$fixturesPath.'/ini');
|
||||
|
||||
try {
|
||||
$loader->loadFile('foo.yml');
|
||||
@ -46,7 +46,7 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('The service file "parameters.ini" is not valid.', $e->getMessage(), '->load() throws an InvalidArgumentException if the loaded file is not a valid YAML file');
|
||||
}
|
||||
|
||||
$loader = new ProjectLoader3(self::$fixturesPath.'/yaml');
|
||||
$loader = new ProjectLoader3(new ContainerBuilder(), self::$fixturesPath.'/yaml');
|
||||
|
||||
foreach (array('nonvalid1', 'nonvalid2') as $fixture) {
|
||||
try {
|
||||
@ -61,26 +61,29 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
|
||||
public function testLoadParameters()
|
||||
{
|
||||
$loader = new ProjectLoader3(self::$fixturesPath.'/yaml');
|
||||
$config = $loader->load('services2.yml');
|
||||
$this->assertEquals(array('foo' => 'bar', 'values' => array(true, false, 0, 1000.3), 'bar' => 'foo', 'foo_bar' => new Reference('foo_bar')), $config->getParameterBag()->all(), '->load() converts YAML keys to lowercase');
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new ProjectLoader3($container, self::$fixturesPath.'/yaml');
|
||||
$loader->load('services2.yml');
|
||||
$this->assertEquals(array('foo' => 'bar', 'values' => array(true, false, 0, 1000.3), 'bar' => 'foo', 'foo_bar' => new Reference('foo_bar')), $container->getParameterBag()->all(), '->load() converts YAML keys to lowercase');
|
||||
}
|
||||
|
||||
public function testLoadImports()
|
||||
{
|
||||
$loader = new ProjectLoader3(self::$fixturesPath.'/yaml');
|
||||
$config = $loader->load('services4.yml');
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new ProjectLoader3($container, self::$fixturesPath.'/yaml');
|
||||
$loader->load('services4.yml');
|
||||
|
||||
$actual = $config->getParameterBag()->all();
|
||||
$actual = $container->getParameterBag()->all();
|
||||
$expected = array('foo' => 'bar', 'values' => array(true, false), 'bar' => '%foo%', 'foo_bar' => new Reference('foo_bar'), 'imported_from_ini' => true, 'imported_from_xml' => true);
|
||||
$this->assertEquals(array_keys($expected), array_keys($actual), '->load() imports and merges imported files');
|
||||
}
|
||||
|
||||
public function testLoadServices()
|
||||
{
|
||||
$loader = new ProjectLoader3(self::$fixturesPath.'/yaml');
|
||||
$config = $loader->load('services6.yml');
|
||||
$services = $config->getDefinitions();
|
||||
$container = new ContainerBuilder();
|
||||
$loader = new ProjectLoader3($container, self::$fixturesPath.'/yaml');
|
||||
$loader->load('services6.yml');
|
||||
$services = $container->getDefinitions();
|
||||
$this->assertTrue(isset($services['foo']), '->load() parses service elements');
|
||||
$this->assertEquals('Symfony\\Components\\DependencyInjection\\Definition', get_class($services['foo']), '->load() converts service element to Definition instances');
|
||||
$this->assertEquals('FooClass', $services['foo']->getClass(), '->load() parses the class attribute');
|
||||
@ -96,20 +99,20 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals(array(array('setBar', array('foo', new Reference('foo'), array(true, false)))), $services['method_call2']->getMethodCalls(), '->load() parses the method_call tag');
|
||||
$this->assertEquals('baz_factory', $services['factory_service']->getFactoryService());
|
||||
|
||||
$aliases = $config->getAliases();
|
||||
$aliases = $container->getAliases();
|
||||
$this->assertTrue(isset($aliases['alias_for_foo']), '->load() parses aliases');
|
||||
$this->assertEquals('foo', $aliases['alias_for_foo'], '->load() parses aliases');
|
||||
}
|
||||
|
||||
public function testExtensions()
|
||||
{
|
||||
Loader::registerExtension(new \ProjectExtension());
|
||||
$loader = new ProjectLoader3(self::$fixturesPath.'/yaml');
|
||||
|
||||
$config = $loader->load('services10.yml');
|
||||
$config->freeze();
|
||||
$services = $config->getDefinitions();
|
||||
$parameters = $config->getParameterBag()->all();
|
||||
$container = new ContainerBuilder();
|
||||
$container->registerExtension(new \ProjectExtension());
|
||||
$loader = new ProjectLoader3($container, self::$fixturesPath.'/yaml');
|
||||
$loader->load('services10.yml');
|
||||
$container->freeze();
|
||||
$services = $container->getDefinitions();
|
||||
$parameters = $container->getParameterBag()->all();
|
||||
|
||||
$this->assertTrue(isset($services['project.service.bar']), '->load() parses extension elements');
|
||||
$this->assertTrue(isset($parameters['project.parameter.bar']), '->load() parses extension elements');
|
||||
@ -118,7 +121,7 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
$this->assertEquals('BAR', $parameters['project.parameter.foo'], '->load() parses extension elements');
|
||||
|
||||
try {
|
||||
$config = $loader->load('services11.yml');
|
||||
$loader->load('services11.yml');
|
||||
$this->fail('->load() throws an InvalidArgumentException if the tag is not valid');
|
||||
} catch (\Exception $e) {
|
||||
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if the tag is not valid');
|
||||
@ -126,7 +129,7 @@ class YamlFileLoaderTest extends \PHPUnit_Framework_TestCase
|
||||
}
|
||||
|
||||
try {
|
||||
$config = $loader->load('services12.yml');
|
||||
$loader->load('services12.yml');
|
||||
$this->fail('->load() throws an InvalidArgumentException if an extension is not loaded');
|
||||
} catch (\Exception $e) {
|
||||
$this->assertInstanceOf('\InvalidArgumentException', $e, '->load() throws an InvalidArgumentException if an extension is not loaded');
|
||||
|
Reference in New Issue
Block a user