minor #31716 [DI] removed support for extension config without ConfigurationInterface implem (ro0NL)
This PR was merged into the 5.0-dev branch.
Discussion
----------
[DI] removed support for extension config without ConfigurationInterface implem
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | #... <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
See #27042
Commits
-------
4dd84f0720
[DI] removed support for extension config without ConfigurationInterface implem
This commit is contained in:
commit
d4464afeb9
@ -1,6 +1,11 @@
|
|||||||
CHANGELOG
|
CHANGELOG
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
5.0.0
|
||||||
|
-----
|
||||||
|
|
||||||
|
* removed support for auto-discovered extension configuration class which does not implement `ConfigurationInterface`
|
||||||
|
|
||||||
4.4.0
|
4.4.0
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -17,6 +17,7 @@ use Symfony\Component\DependencyInjection\Container;
|
|||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\Exception\BadMethodCallException;
|
use Symfony\Component\DependencyInjection\Exception\BadMethodCallException;
|
||||||
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
|
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
|
||||||
|
use Symfony\Component\DependencyInjection\Exception\LogicException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provides useful features shared by many extensions.
|
* Provides useful features shared by many extensions.
|
||||||
@ -88,10 +89,7 @@ abstract class Extension implements ExtensionInterface, ConfigurationExtensionIn
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!$class->implementsInterface(ConfigurationInterface::class)) {
|
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));
|
||||||
//throw new LogicException(sprintf('The extension configuration class "%s" must implement "%s".', $class->getName(), ConfigurationInterface::class));
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!($constructor = $class->getConstructor()) || !$constructor->getNumberOfRequiredParameters()) {
|
if (!($constructor = $class->getConstructor()) || !$constructor->getNumberOfRequiredParameters()) {
|
||||||
|
@ -14,6 +14,10 @@ namespace Symfony\Component\DependencyInjection\Tests\Extension;
|
|||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
use Symfony\Component\DependencyInjection\Extension\Extension;
|
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
|
class ExtensionTest extends TestCase
|
||||||
{
|
{
|
||||||
@ -44,6 +48,38 @@ class ExtensionTest extends TestCase
|
|||||||
|
|
||||||
$extension->isConfigEnabled(new ContainerBuilder(), []);
|
$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
|
class EnableableExtension extends Extension
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Symfony\Component\DependencyInjection\Tests\Fixtures\Extension\InvalidConfig;
|
||||||
|
|
||||||
|
class Configuration
|
||||||
|
{
|
||||||
|
}
|
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -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');
|
||||||
|
}
|
||||||
|
}
|
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
@ -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');
|
||||||
|
}
|
||||||
|
}
|
@ -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)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user