From 3f39828896700984473b34a9ec81875fb92322ad Mon Sep 17 00:00:00 2001 From: dantleech Date: Sun, 19 Jun 2016 20:27:42 +0100 Subject: [PATCH 01/17] Merge parameters --- lib/Container.php | 17 +++++++++++++++++ tests/Unit/ContainerTest.php | 26 ++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/lib/Container.php b/lib/Container.php index 99ed6d0..6cf34c3 100644 --- a/lib/Container.php +++ b/lib/Container.php @@ -191,6 +191,23 @@ public function setParameter($name, $value) $this->config[$name] = $value; } + public function mergeParameter($name, array $values) + { + $actual = $this->getParameter($name); + + if (!is_array($actual)) { + throw new \InvalidArgumentException(sprintf( + 'Cannot merge values on to a scalar parameter "%s"', + $name + )); + } + + $this->setParameter($name, array_merge( + $actual, + $values + )); + } + /** * Return the parameter with the given name. * diff --git a/tests/Unit/ContainerTest.php b/tests/Unit/ContainerTest.php index d7656b8..d7f51cb 100644 --- a/tests/Unit/ContainerTest.php +++ b/tests/Unit/ContainerTest.php @@ -130,6 +130,32 @@ public function testRegisterExtensionWithUserConfig() $this->assertEquals('bazz', $object->foobar); } + /** + * It should merge parameters. + */ + public function testMergeParameters() + { + $this->container->setParameter('foo', [ 'foo' => 'bar' ]); + $this->container->mergeParameter('foo', [ 'bar' => 'boo' ]); + $this->assertEquals([ + 'foo' => 'bar', + 'bar' => 'boo' + ], $this->container->getParameter('foo')); + } + + /** + * It should throw an exception when trying to merge a value into a non-array parameter. + * + * @expectedException \InvalidArgumentException + * @expectedExceptionMessage scalar + */ + public function testMergeParameterNonArray() + { + $this->container->setParameter('foo', 'bar'); + $this->container->mergeParameter('foo', [ 'bar' => 'boo' ]); + } + + /** * It should throw an exception if an extension class does not exist. * From 9aa5a3ff6d950921d0a079a0841e161397d4a5fa Mon Sep 17 00:00:00 2001 From: dantleech Date: Sat, 17 Sep 2016 09:28:42 +0100 Subject: [PATCH 02/17] Style CI --- tests/Unit/ContainerTest.php | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/tests/Unit/ContainerTest.php b/tests/Unit/ContainerTest.php index 1dec2cf..ddecc3a 100644 --- a/tests/Unit/ContainerTest.php +++ b/tests/Unit/ContainerTest.php @@ -134,11 +134,11 @@ public function testRegisterExtensionWithUserConfig() */ public function testMergeParameters() { - $this->container->setParameter('foo', [ 'foo' => 'bar' ]); - $this->container->mergeParameter('foo', [ 'bar' => 'boo' ]); + $this->container->setParameter('foo', ['foo' => 'bar']); + $this->container->mergeParameter('foo', ['bar' => 'boo']); $this->assertEquals([ 'foo' => 'bar', - 'bar' => 'boo' + 'bar' => 'boo', ], $this->container->getParameter('foo')); } @@ -151,10 +151,9 @@ public function testMergeParameters() public function testMergeParameterNonArray() { $this->container->setParameter('foo', 'bar'); - $this->container->mergeParameter('foo', [ 'bar' => 'boo' ]); + $this->container->mergeParameter('foo', ['bar' => 'boo']); } - /** * It should throw an exception if an extension class does not exist. * From edbd67ae839abdd51ab6a179e0cf2266322e7c49 Mon Sep 17 00:00:00 2001 From: dantleech Date: Sat, 17 Sep 2016 09:43:50 +0100 Subject: [PATCH 03/17] Updated README --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9579b97..26578b7 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ class MyExtension implements ExtensionInterface $container->get('some_other_service') ); - foreach ($container->getServiceIdsForTag() as $serviceId) { + foreach ($container->getServiceIdsForTag('tag') as $serviceId => $params) { $service->add($container->get($serviceId)); } @@ -59,7 +59,7 @@ class MyExtension implements ExtensionInterface $container->getParameter('foo_bar'), $container->get('some_other_service') ); - }, [ 'tag' => []); + }, [ 'tag' => [ 'param1' => 'foobar' ]); } /** From 8cd29cf58104e68b4d5cc2af5703e6235e41e7b9 Mon Sep 17 00:00:00 2001 From: dantleech Date: Tue, 18 Jul 2017 14:10:10 +0200 Subject: [PATCH 04/17] Added getparameters method --- lib/Container.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/Container.php b/lib/Container.php index 599a4f6..43babfe 100644 --- a/lib/Container.php +++ b/lib/Container.php @@ -225,6 +225,11 @@ public function getParameter($name) return $this->config[$name]; } + public function getParameters() + { + return $this->config; + } + /** * Return true if the named parameter exists. * From f45dc3cde24826be50bcbd92765cb6c5f8240edd Mon Sep 17 00:00:00 2001 From: Gabriel Caruso Date: Wed, 8 Nov 2017 05:28:05 -0200 Subject: [PATCH 05/17] Use PHPUnit\Framework\TestCase instead of PHPUnit_Framework_TestCase --- tests/Unit/ContainerTest.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/tests/Unit/ContainerTest.php b/tests/Unit/ContainerTest.php index ddecc3a..4b24f8c 100644 --- a/tests/Unit/ContainerTest.php +++ b/tests/Unit/ContainerTest.php @@ -13,8 +13,9 @@ use PhpBench\DependencyInjection\Container; use PhpBench\DependencyInjection\ExtensionInterface; +use PHPUnit\Framework\TestCase; -class ContainerTest extends \PHPUnit_Framework_TestCase +class ContainerTest extends TestCase { private $container; From e2205748aec71e578c0ec43af43ee2adfdc217ae Mon Sep 17 00:00:00 2001 From: Gabriel Caruso Date: Wed, 8 Nov 2017 06:11:16 -0200 Subject: [PATCH 06/17] Set PHPUnit minimum version to 4.8.36 --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index f8af677..124ae8b 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "container-interop/container-interop": "^1.1" }, "require-dev": { + "phpunit/phpunit": "^4.8.36" }, "autoload": { "psr-4": { From 3d4783af726e110cc019cc0303baf444580423d4 Mon Sep 17 00:00:00 2001 From: webimpress Date: Sun, 11 Feb 2018 01:56:34 +0000 Subject: [PATCH 07/17] Updated to PSR-11 container Closes #4 --- composer.json | 2 +- lib/Container.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 124ae8b..ff39659 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ } ], "require": { - "container-interop/container-interop": "^1.1" + "psr/container": "^1.0" }, "require-dev": { "phpunit/phpunit": "^4.8.36" diff --git a/lib/Container.php b/lib/Container.php index 43babfe..bd72b6b 100644 --- a/lib/Container.php +++ b/lib/Container.php @@ -11,7 +11,7 @@ namespace PhpBench\DependencyInjection; -use Interop\Container\ContainerInterface; +use Psr\Container\ContainerInterface; /** * PHPBench Container. From bfeff14d7f8fb4b1b4710e3af2178f09c02526bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20M=C3=B6ller?= Date: Thu, 27 Dec 2018 19:15:01 +0100 Subject: [PATCH 08/17] Fix: Adjust DocBlock --- lib/Container.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/Container.php b/lib/Container.php index bd72b6b..16ebfc6 100644 --- a/lib/Container.php +++ b/lib/Container.php @@ -141,7 +141,7 @@ public function set($serviceId, $instance) * * @param string $tag * - * @return string[] + * @return string[][] */ public function getServiceIdsForTag($tag) { @@ -163,7 +163,7 @@ public function getServiceIdsForTag($tag) * * @param string $serviceId * @param \Closure $instantiator - * @param string[] $tags + * @param string[][] $tags */ public function register($serviceId, \Closure $instantiator, array $tags = []) { From a1d0e2b9fd969cee9c7af413a457a38204b54ed6 Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Mon, 24 Aug 2020 10:07:57 +0100 Subject: [PATCH 09/17] Updated travis --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 7d8abee..4c3f4e5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,4 +10,4 @@ before_script: - composer install script: - - phpunit + - ./vendor/bin/phpunit From 9b8062aad23caae28b4fd94f1b59e8b760491622 Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sat, 31 Oct 2020 11:09:37 +0000 Subject: [PATCH 10/17] 2.0: Use SF options resolver... and improve QA tooling --- composer.json | 16 ++++- lib/Container.php | 98 +++++++++++++++++---------- lib/ExtensionInterface.php | 10 +-- lib/InvalidConfigurationException.php | 9 +++ tests/Unit/ContainerTest.php | 49 +++++++------- 5 files changed, 116 insertions(+), 66 deletions(-) create mode 100644 lib/InvalidConfigurationException.php diff --git a/composer.json b/composer.json index ff39659..edc31e5 100644 --- a/composer.json +++ b/composer.json @@ -10,10 +10,13 @@ } ], "require": { - "psr/container": "^1.0" + "psr/container": "^1.0", + "symfony/options-resolver": "^4.2" }, "require-dev": { - "phpunit/phpunit": "^4.8.36" + "phpunit/phpunit": "^8", + "phpstan/phpstan": "^0.12.52", + "friendsofphp/php-cs-fixer": "^2.16" }, "autoload": { "psr-4": { @@ -28,7 +31,14 @@ }, "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "2.0-dev" } + }, + "scripts": { + "integrate": [ + "vendor/bin/phpunit", + "vendor/bin/php-cs-fixer fix lib", + "vendor/bin/phpstan analyse lib --level=7" + ] } } diff --git a/lib/Container.php b/lib/Container.php index 16ebfc6..bdc2382 100644 --- a/lib/Container.php +++ b/lib/Container.php @@ -11,7 +11,10 @@ namespace PhpBench\DependencyInjection; +use Closure; use Psr\Container\ContainerInterface; +use Symfony\Component\OptionsResolver\Exception\ExceptionInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; /** * PHPBench Container. @@ -20,18 +23,39 @@ */ class Container implements ContainerInterface { + /** + * @var array + */ private $instantiators = []; + + /** + * @var array + */ private $services = []; + + /** + * @var array> + */ private $tags = []; + + /** + * @var array + */ private $config = []; - private $userConfig = []; + /** + * @var array + */ private $extensionClasses = []; - public function __construct(array $extensionClasses = [], array $userConfig = []) + /** + * @param array $config + * @param array $extensionClasses + */ + public function __construct(array $extensionClasses = [], array $config = []) { $this->extensionClasses = $extensionClasses; - $this->userConfig = $userConfig; + $this->config = $config; } /** @@ -41,11 +65,13 @@ public function __construct(array $extensionClasses = [], array $userConfig = [] * * This method must be called before `build()`. */ - public function init() + public function init(): void { + $resolver = new OptionsResolver(); $extensions = []; + $config = []; - if (empty($this->extensionClasses) && empty($this->userConfig)) { + if (empty($this->extensionClasses) && empty($this->config)) { return; } @@ -68,26 +94,27 @@ public function init() } $extensions[] = $extension; - - $this->config = array_merge( - $this->config, - $extension->getDefaultConfig() - ); + $extension->configure($resolver); } - $diff = array_diff(array_keys($this->userConfig), array_keys($this->config)); + $diff = array_diff(array_keys($this->config), array_keys($this->config)); if ($diff) { throw new \InvalidArgumentException(sprintf( 'Unknown configuration keys: "%s". Permitted keys: "%s"', - implode('", "', $diff), implode('", "', array_keys($this->config)) + implode('", "', $diff), + implode('", "', array_keys($this->config)) )); } - $this->config = array_merge( - $this->config, - $this->userConfig - ); + try { + $this->config = $resolver->resolve($this->config); + } catch (ExceptionInterface $resolverException) { + throw new InvalidConfigurationException(sprintf( + 'Invalid user configuration: %s', + $resolverException->getMessage() + ), 0, $resolverException); + } foreach ($extensions as $extension) { $extension->load($this); @@ -99,8 +126,6 @@ public function init() * Note that this method will return the same instance on subsequent calls. * * @param string $serviceId - * - * @return mixed */ public function get($serviceId) { @@ -120,7 +145,10 @@ public function get($serviceId) return $this->services[$serviceId]; } - public function has($serviceId) + /** + * @param string $serviceId + */ + public function has($serviceId): bool { return isset($this->instantiators[$serviceId]); } @@ -128,10 +156,9 @@ public function has($serviceId) /** * Set a service instance. * - * @param string $serviceId * @param mixed $instance */ - public function set($serviceId, $instance) + public function set(string $serviceId, $instance): void { $this->services[$serviceId] = $instance; } @@ -139,11 +166,9 @@ public function set($serviceId, $instance) /** * Return services IDs for the given tag. * - * @param string $tag - * - * @return string[][] + * @return array> */ - public function getServiceIdsForTag($tag) + public function getServiceIdsForTag(string $tag): array { $serviceIds = []; foreach ($this->tags as $serviceId => $tags) { @@ -161,15 +186,15 @@ public function getServiceIdsForTag($tag) * The instantiator is a closure which accepts an instance of this container and * returns a new instance of the service class. * - * @param string $serviceId - * @param \Closure $instantiator - * @param string[][] $tags + * @param array> $tags */ - public function register($serviceId, \Closure $instantiator, array $tags = []) + public function register(string $serviceId, Closure $instantiator, array $tags = []): void { if (isset($this->instantiators[$serviceId])) { throw new \InvalidArgumentException(sprintf( - 'Service with ID "%s" has already been registered', $serviceId)); + 'Service with ID "%s" has already been registered', + $serviceId + )); } $this->instantiators[$serviceId] = $instantiator; @@ -179,15 +204,17 @@ public function register($serviceId, \Closure $instantiator, array $tags = []) /** * Set the value of the parameter with the given name. * - * @param string $name * @param mixed $value */ - public function setParameter($name, $value) + public function setParameter(string $name, $value): void { $this->config[$name] = $value; } - public function mergeParameter($name, array $values) + /** + * @param array $values + */ + public function mergeParameter(string $name, array $values): void { $actual = $this->getParameter($name); @@ -225,7 +252,10 @@ public function getParameter($name) return $this->config[$name]; } - public function getParameters() + /** + * @return array + */ + public function getParameters(): array { return $this->config; } diff --git a/lib/ExtensionInterface.php b/lib/ExtensionInterface.php index 55066e9..33c6943 100644 --- a/lib/ExtensionInterface.php +++ b/lib/ExtensionInterface.php @@ -11,6 +11,8 @@ namespace PhpBench\DependencyInjection; +use Symfony\Component\OptionsResolver\OptionsResolver; + interface ExtensionInterface { /** @@ -18,12 +20,10 @@ interface ExtensionInterface * * @param Container $container */ - public function load(Container $container); + public function load(Container $container): void; /** - * Return the default parameters for the container. - * - * @return array + * Configure the parameters which can be accessed by the extension. */ - public function getDefaultConfig(); + public function configure(OptionsResolver $resolver): void; } diff --git a/lib/InvalidConfigurationException.php b/lib/InvalidConfigurationException.php new file mode 100644 index 0000000..2227177 --- /dev/null +++ b/lib/InvalidConfigurationException.php @@ -0,0 +1,9 @@ +container = new Container(); } @@ -79,12 +82,11 @@ public function testServiceIdTags() /** * Its should throw an exception if a service is already registered. - * - * @expectedException InvalidArgumentException - * @expectedExceptionMessge Service with ID "stdclass" */ public function testServiceAlreadyRegistered() { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Service with ID "stdclass"'); $this->container->register('stdclass', function () { return new \stdClass(); }); @@ -145,24 +147,24 @@ public function testMergeParameters() /** * It should throw an exception when trying to merge a value into a non-array parameter. - * - * @expectedException \InvalidArgumentException - * @expectedExceptionMessage scalar */ public function testMergeParameterNonArray() { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('scalar'); + $this->container->setParameter('foo', 'bar'); $this->container->mergeParameter('foo', ['bar' => 'boo']); } /** * It should throw an exception if an extension class does not exist. - * - * @expectedException InvalidArgumentException - * @expectedExceptionMessage "NotExistingExtension" does not exist */ public function testRegisterNotExistingExtension() { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('"NotExistingExtension" does not exist'); + $container = new Container(['NotExistingExtension']); $container->init(); } @@ -170,24 +172,23 @@ public function testRegisterNotExistingExtension() /** * It should throw an exception if an extension class does not implement * the ExtensionInterface. - * - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Extension "stdClass" must implement the */ public function testRegisterNotImplementingExtension() { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Extension "stdClass" must implement the'); + $container = new Container(['stdClass']); $container->init(); } /** * It should throw an exception if an unknown user configuration key is used. - * - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Unknown configuration keys: "not". Permitted keys: */ public function testUnknownUserConfig() { + $this->expectException(InvalidConfigurationException::class); + $this->expectExceptionMessage('Invalid user configuration'); $container = new Container([], [ 'not' => 'existing', ]); @@ -196,12 +197,12 @@ public function testUnknownUserConfig() /** * It should throw an exception if a requested parameter does not exist. - * - * @expectedException InvalidArgumentException - * @expectedExceptionMessage Parameter "foo" has not been registered */ public function testUnknownParameter() { + $this->expectException(InvalidArgumentException::class); + $this->expectExceptionMessage('Parameter "foo" has not been registered'); + $container = new Container(); $container->getParameter('foo'); } @@ -209,14 +210,14 @@ public function testUnknownParameter() class TestExtension implements ExtensionInterface { - public function getDefaultConfig() + public function configure(OptionsResolver $resolver): void { - return [ + $resolver->setDefaults([ 'foo' => 'bar', - ]; + ]); } - public function load(Container $container) + public function load(Container $container): void { $container->register('foobar', function ($container) { $stdClass = new \stdClass(); From 18577f96d26dd054519cc3b6493a951b600ff682 Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sat, 31 Oct 2020 11:21:59 +0000 Subject: [PATCH 11/17] updated README --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 26578b7..374e25e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,6 @@ PHPBench Service Container ========================== [![Build Status](https://travis-ci.org/phpbench/container.svg?branch=master)](https://travis-ci.org/phpbench/container) -[![StyleCI](https://styleci.io/repos/55606670/shield)](https://styleci.io/repos/55606670) Simple, extensible dependency injection container with parameters and service tagging. Implements [container From 04054b7c8cb30f948e5a289601c34834db58aa9f Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sat, 21 Nov 2020 10:55:32 +0000 Subject: [PATCH 12/17] Allow Symfony Options Resolver 5 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index edc31e5..1bd1221 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ ], "require": { "psr/container": "^1.0", - "symfony/options-resolver": "^4.2" + "symfony/options-resolver": "^4.2 || ^5.0" }, "require-dev": { "phpunit/phpunit": "^8", From def10824b6009d31028fa8dc9f73f4b26b234a67 Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Sun, 4 Apr 2021 08:23:17 +0100 Subject: [PATCH 13/17] Add accessor for extension classes --- lib/Container.php | 8 ++++++++ tests/Unit/ContainerTest.php | 3 +++ 2 files changed, 11 insertions(+) diff --git a/lib/Container.php b/lib/Container.php index bdc2382..d1b12b2 100644 --- a/lib/Container.php +++ b/lib/Container.php @@ -271,4 +271,12 @@ public function hasParameter($name) { return array_key_exists($name, $this->config); } + + /** + * @return class-string[] + */ + public function getExtensionClasses(): array + { + return $this->extensionClasses; + } } diff --git a/tests/Unit/ContainerTest.php b/tests/Unit/ContainerTest.php index d527d35..90b47d0 100644 --- a/tests/Unit/ContainerTest.php +++ b/tests/Unit/ContainerTest.php @@ -110,6 +110,9 @@ public function testRegisterExtension() $object = $container->get('foobar'); $this->assertInstanceOf('stdClass', $object); $this->assertEquals('bar', $object->foobar); + $this->assertEquals([ + __NAMESPACE__ . '\\TestExtension', + ], $container->getExtensionClasses());; } /** From 7595bef04a1220ffdf38301b40f7b48f8c241a95 Mon Sep 17 00:00:00 2001 From: Sergei Predvoditelev Date: Wed, 14 Jul 2021 21:21:51 +0300 Subject: [PATCH 14/17] Add support psr/contaner:^2.0 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 1bd1221..aa6c75c 100644 --- a/composer.json +++ b/composer.json @@ -10,7 +10,7 @@ } ], "require": { - "psr/container": "^1.0", + "psr/container": "^1.0|^2.0", "symfony/options-resolver": "^4.2 || ^5.0" }, "require-dev": { From 0f4e05768f8c26d5a48e1be54ec8a091c9271a17 Mon Sep 17 00:00:00 2001 From: Raul Castellanos Date: Mon, 24 Jan 2022 17:05:37 +0100 Subject: [PATCH 15/17] Add support for Symfony 6 components Adding support for Symfony 6.x option resolver component to avoid failing installs on Symfony 6.x projects. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index aa6c75c..9a0cd81 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ ], "require": { "psr/container": "^1.0|^2.0", - "symfony/options-resolver": "^4.2 || ^5.0" + "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0" }, "require-dev": { "phpunit/phpunit": "^8", From 6d555ff7174fca13f9b1ec0b4a089ed41d0ab392 Mon Sep 17 00:00:00 2001 From: Daniel Leech Date: Tue, 25 Jan 2022 10:17:35 +0000 Subject: [PATCH 16/17] Bump alias --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 9a0cd81..b3689fe 100644 --- a/composer.json +++ b/composer.json @@ -31,7 +31,7 @@ }, "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-master": "2.x-dev" } }, "scripts": { From ad8509364c498836b06a915ce3849e920c686f4c Mon Sep 17 00:00:00 2001 From: Jonas Elfering Date: Mon, 30 Oct 2023 11:29:16 +0100 Subject: [PATCH 17/17] Add support for symfony 7 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index b3689fe..9388bd1 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,7 @@ ], "require": { "psr/container": "^1.0|^2.0", - "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0" + "symfony/options-resolver": "^4.2 || ^5.0 || ^6.0 || ^7.0" }, "require-dev": { "phpunit/phpunit": "^8",