[DI] removed support for extension config without ConfigurationInterface implem

This commit is contained in:
Roland Franssen 2019-05-30 08:17:44 +02:00
parent 3fec46861a
commit 4dd84f0720
9 changed files with 125 additions and 4 deletions

View File

@ -1,6 +1,11 @@
CHANGELOG
=========
5.0.0
-----
* removed support for auto-discovered extension configuration class which does not implement `ConfigurationInterface`
4.4.0
-----

View File

@ -17,6 +17,7 @@ use Symfony\Component\DependencyInjection\Container;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Exception\BadMethodCallException;
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
use Symfony\Component\DependencyInjection\Exception\LogicException;
/**
* Provides useful features shared by many extensions.
@ -88,10 +89,7 @@ abstract class Extension implements ExtensionInterface, ConfigurationExtensionIn
}
if (!$class->implementsInterface(ConfigurationInterface::class)) {
@trigger_error(sprintf('Not implementing "%s" in the extension configuration class "%s" is deprecated since Symfony 4.1.', ConfigurationInterface::class, $class->getName()), E_USER_DEPRECATED);
//throw new LogicException(sprintf('The extension configuration class "%s" must implement "%s".', $class->getName(), ConfigurationInterface::class));
return null;
throw new LogicException(sprintf('The extension configuration class "%s" must implement "%s".', $class->getName(), ConfigurationInterface::class));
}
if (!($constructor = $class->getConstructor()) || !$constructor->getNumberOfRequiredParameters()) {

View File

@ -14,6 +14,10 @@ namespace Symfony\Component\DependencyInjection\Tests\Extension;
use PHPUnit\Framework\TestCase;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension;
use Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\InvalidConfig\InvalidConfigExtension;
use Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\SemiValidConfig\SemiValidConfigExtension;
use Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\ValidConfig\Configuration;
use Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\ValidConfig\ValidConfigExtension;
class ExtensionTest extends TestCase
{
@ -44,6 +48,38 @@ class ExtensionTest extends TestCase
$extension->isConfigEnabled(new ContainerBuilder(), []);
}
public function testNoConfiguration()
{
$extension = new EnableableExtension();
$this->assertNull($extension->getConfiguration([], new ContainerBuilder()));
}
public function testValidConfiguration()
{
$extension = new ValidConfigExtension();
$this->assertInstanceOf(Configuration::class, $extension->getConfiguration([], new ContainerBuilder()));
}
public function testSemiValidConfiguration()
{
$extension = new SemiValidConfigExtension();
$this->assertNull($extension->getConfiguration([], new ContainerBuilder()));
}
/**
* @expectedException \Symfony\Component\DependencyInjection\Exception\LogicException
* @expectedExceptionMessage The extension configuration class "Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\InvalidConfig\Configuration" must implement "Symfony\Component\Config\Definition\ConfigurationInterface".
*/
public function testInvalidConfiguration()
{
$extension = new InvalidConfigExtension();
$extension->getConfiguration([], new ContainerBuilder());
}
}
class EnableableExtension extends Extension

View File

@ -0,0 +1,7 @@
<?php
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\InvalidConfig;
class Configuration
{
}

View File

@ -0,0 +1,13 @@
<?php
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\InvalidConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension as BaseExtension;
class InvalidConfigExtension extends BaseExtension
{
public function load(array $configs, ContainerBuilder $container)
{
}
}

View File

@ -0,0 +1,18 @@
<?php
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\SemiValidConfig;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function __construct($required)
{
}
public function getConfigTreeBuilder()
{
return new TreeBuilder('root');
}
}

View File

@ -0,0 +1,13 @@
<?php
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\SemiValidConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension as BaseExtension;
class SemiValidConfigExtension extends BaseExtension
{
public function load(array $configs, ContainerBuilder $container)
{
}
}

View File

@ -0,0 +1,14 @@
<?php
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\ValidConfig;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
return new TreeBuilder('root');
}
}

View File

@ -0,0 +1,17 @@
<?php
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\ValidConfig;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Extension\Extension as BaseExtension;
class ValidConfigExtension extends BaseExtension
{
public function __construct($optional = null)
{
}
public function load(array $configs, ContainerBuilder $container)
{
}
}